Htaccess mod_rewrite不检测项目参数


htaccess mod_rewrite not detects params for project

我开始了一个基于http://www.php-mvc.net/的php项目,我在谷歌上搜索了如何设置我的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>

在我的hosts文件中,我添加了主机127.0.0.1 phpmvc.test 在。htacces文件中,我有以下几行
RewriteEngine on
RewriteRule ^(.*)'/$ index.php?url=$1 [QSA,L]

我在设置文件后重新启动Apache,当我去phpmvc.test它工作正常,但当我尝试phpmvc.test/test它显示一个错误,说请求的URL在这个服务器上找不到。

编辑:我尝试了RewriteRule ^(.*)$ index.php?url=$1 [QSA,L],但它显示了同样的错误编辑2:我尝试了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所示。