为什么这个rewriterrule不工作?(xampp)



我已经在我的项目根文件夹c:xampphtdocsmyproject中设置了这个非常简单的。htaccess文件

RewriteEngine on   
RewriteRule ^(.+)$ test.php?stuff=$1 [QSA,L]

test.php(没有index.php)

<?php
if (isset($GET_['stuff'])) {
    echo $GET_['stuff'];
} else {
    echo "not set";
}

当我访问localhost/myproject而不是重定向到test.php时,它只是列出了我的项目的目录结构。

当我把htaccess改成

RewriteRule ^(.+)$ http://www.google.de [L]

一切正常。我做错了什么?

为什么你得到目录列表,因为你的URL localhost/myproject实际上发送一个空的每目录URI当.htaccess被放置在/myproject/

你的URI模式是(.+),显然不会匹配一个空字符串,因此规则不会触发,因为你没有index.phpindex.html,你得到目录列表。

正确的规则应该是:

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

PS:请注意,删除RewriteCond将为localhost/myproject调用test.php,但它将在内部作为test.php?stuff=test.php&stuff=调用

最新更新