为什么这个RewriteRule不起作用? (XAMPP)

时间:2014-07-04 18:11:45

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

我在项目根文件夹c:\xampp\htdocs\myproject\中设置了这个非常简单的.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]

一切都按预期工作。我做错了什么?

1 个答案:

答案 0 :(得分:1)

您获取目录列表的原因是因为当localhost/myproject放置在.htaccess内时,您的网址/myproject/实际上会发送一个空的每个dir URI。

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

正确的规则应该是:

RewriteEngine on

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

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