htaccess mod_rewrite没有检测到项目的参数

时间:2014-08-24 17:24:56

标签: php .htaccess mod-rewrite wamp

我创建了一个基于http://www.php-mvc.net/的php项目,我在Google上搜索了如何设置WAMP Server以启用URL重写。

我正在运行最新版本的WAMP。

1)在mod_rewrite

上启用httpd.conf模块

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:我试过EDIT:我尝试了Rahil Wazir的建议,但它仍然没有用。

我有这个控制器文件IndexController.class.php,如果我使用此网址访问它是有效的:phpmvc.test?url=index但如果我尝试phpmvc.test/index,则说明找不到index服务器

<?php

class IndexController {

    public static function index() {

        echo "Index controller";

    }
}

在root上打印$_GET$_SERVER我得到一个空的Array()和服务器阵列。如果我转到phpmvc.test/index?url=index,我会在$_GET["url"]$_SERVER [QUERY_STRING] => url=index上获得价值。

2 个答案:

答案 0 :(得分:0)

这是因为Apache认为/test是您尝试访问的文件或目录,可能不存在。

您需要应用大多数Front controller pattern框架使用的两个着名条件:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]

除非请求的uri中的文件或目录存在,否则告诉Apache重写模块,然后应用重写规则,否则呈现文件或目录的内容。

答案 1 :(得分:0)

通过检查$ _GET和$ _SERVER变量中的内容进行调试。

print_r($_GET);
print_r($_SERVER);

比较[&#39; url&#39;]索引值的差异。 此外,它可能取决于您在/ index。之前的URL上看到的子文件夹深度。