我在项目根文件夹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]
一切都按预期工作。我做错了什么?
答案 0 :(得分:1)
您获取目录列表的原因是因为当localhost/myproject
放置在.htaccess
内时,您的网址/myproject/
实际上会发送一个空的每个dir URI。
您的URI模式是(.+)
,显然不会匹配空字符串,因此规则不会触发,因为您没有index.php
或index.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=