[英]htaccess mod_rewrite not detects params for project
我基于http://www.php-mvc.net/启动了一个php项目,并在Google上搜索了如何设置WAMP Server
以启用URL
重写。
我正在运行最新版本的WAMP。
1)在httpd.conf
上启用mod_rewrite
模块
2)在httpd-vhosts.conf
我添加了一个虚拟主机
<VirtualHost *:80>
ServerName phpmvc.test
ServerAlias *.phpmvc.test
VirtualDocumentRoot "C:\wamp\www\phpmvc"
ErrorLog "logs\errors.log"
<directory "C:\wamp\www\phpmvc">
Options Indexes FollowSymLinks
AllowOverride all
Order Deny,Allow
Deny from all
Allow from all
</directory>
3)在我的主机文件中,我添加了主机127.0.0.1 phpmvc.test
4)在.htacces文件上我有这行
RewriteEngine on
RewriteRule ^(.*)\/$ index.php?url=$1 [QSA,L]
设置完文件后,我重新启动了Apache,当我去phpmvc.test
它工作正常,但是当我尝试phpmvc.test/test
它显示了一条错误,指出该服务器上找不到所请求的URL。
编辑:我尝试了RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
但它显示了相同的错误EDIT2:我尝试了编辑:我尝试了Rahil Wazir的建议,但仍然无法正常工作。
我有此控制器文件IndexController.class.php
,如果我使用以下URL访问它,则该文件有效: phpmvc.test?url=index
但是如果我尝试phpmvc.test/index
它说在服务器上找不到该index
。
<?php
class IndexController {
public static function index() {
echo "Index controller";
}
}
在根目录上打印$_GET
和$_SERVER
会得到一个空的Array()
和服务器数组。 如果我去phpmvc.test/index?url=index
我得到$_GET["url"]
和$_SERVER [QUERY_STRING] => url=index
。
这是因为Apache认为/test
是您要访问的文件或目录,可能不存在。
您需要应用大多数Front Controller模式框架使用的两个著名条件:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
它告诉Apache重写模块,除非存在来自所请求uri的文件或目录,然后应用重写规则,否则呈现文件或目录的内容。
通过检查$ _GET和$ _SERVER变量中得到的内容进行调试。
print_r($_GET);
print_r($_SERVER);
比较['url']索引值的差异。 另外,它可能取决于您在/ index前面的URL上看到的子文件夹深度。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.