我的.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
对于这种特殊情况,我该如何进行重写?
问题是根目录是一个目录。所以这个条件阻止了你的规则被应用:
RewriteCond %{REQUEST_FILENAME} !-d
尝试添加一个规则,如:
RewriteRule ^$ _service.php?uri=/ [NC,L]
或者
您可能需要指定文档根目录才能找到文件或目录;我对这种模式的变体是:
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
中没有。