Apache Mod重写前端控制器模式

时间:2015-02-26 03:56:07

标签: php apache .htaccess mod-rewrite url-rewriting

我的.htaccess文件中有以下内容:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d

    RewriteRule ^(.*)$ _service.php?uri=$1 [NC,L]
</IfModule>

唯一的问题是没有重写,我只是在尝试访问服务器localhost的根页时看到了一个目录列表。

即使我尝试将匹配设为可选RewriteRule ^(.*)?$ _service.php?uri=$1 [NC,L],它也不起作用。

重写似乎适用于任何其他情况,例如localhost/foo/bar

如何针对这种特殊情况进行重写?

2 个答案:

答案 0 :(得分:1)

问题是root是一个目录。因此,这种情况会阻止您的规则被应用:

RewriteCond %{REQUEST_FILENAME} !-d

尝试添加以下规则:

RewriteRule ^$ _service.php?uri=/ [NC,L]

或其他什么

答案 1 :(得分:0)

您可能需要指定文档根目录才能找到文件或目录;我对这种模式的看法是:

RewriteEngine On
RewriteCond %{DOCUMENT_ROOT}%{SCRIPT_FILENAME} !-f
RewriteCond %{DOCUMENT_ROOT}%{SCRIPT_FILENAME} !-d
RewriteRule . /index.php [L,QSA,B]

在这种情况下,根页面(对我来说)是正确的(例如http://www.example.com/)。注意,我在vhost.conf而不是.htaccess中有此内容。