mod_rewrite 未按预期运行 - 缺少路径信息

mod_rewrite 未按预期运行 - 缺少路径信息

我刚刚安装了全新的 Apache (Apache/2.4.7 - Ubuntu),创建并启用了一个文档根目录为 的站点/var/www/html。启用 mod_rewrite 后,我继续在该目录中创建一个简单的 .htaccess 文件。然后我添加了标准:

Options +FollowSymlinks
RewriteEngine on 

然后我开始创建重写规则。由于 .htaccess 通常不太友好,我通常通过首先将结果作为参数发送到临时 php 文件来创建重定向,该文件只会转储 $_GET,以便我可以看到正在发生的事情。所以我的重写规则从基本开始:

RewriteRule ^(.*)$ test.php?name=$1

我的测试要求是:/test/path.html

预期结果:[name] => test/path.html 实际结果:[name] => test.php 什么鬼?

好像 301 重定向已经以某种方式发生了。我似乎无法获取实际的请求路径。此外,当检查应该具有路径(如 )的服务器变量时%{PATH_INFO}%{ORIG_PATH_INFO}它们会返回空值并%{REQUEST_URI}返回/test.php

我尝试过将其添加AcceptPathInfo On到 .htaccess 中,但没有任何效果。我也尝试过添加,RewriteBase /但这也没有效果。此外,将重写规则移至我的.conf文件后,我得到了相同的结果。

知道这里可能发生什么事吗?

答案1

重写规则“忽略.htaccess”所有前面的路径元素:

在目录和 htaccess 上下文中,模式最初将与文件系统路径进行匹配,在删除引导服务器到当前 RewriteRule 的前缀之后(例如“app1/index.html”或“index.html”,具体取决于指令的定义位置)。

所以你可能想添加

RewriteBase /test

到你的.htaccess。如果你想绕过它 - 在 Vhost/httpd.conf 级别配置重写。

刚刚使用以下配置进行了测试

# cat .htaccess 
RewriteEngine on
RewriteBase /~dimon
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^(rw.*)$ test.php?name=$1

# cat test.php 
<? echo "Name:",$_GET["name"]; 
   phpinfo();
?>

并根据要求http://myserver.com/~dimon/rwfoo, 得到:

Name:rwfoo
....
REDIRECT_SCRIPT_URL /~dimon/rwfoo
REDIRECT_SCRIPT_URI http://myserver.com/~dimon/rwfoo
SCRIPT_URL  /~dimon/rwfoo
SCRIPT_URI  http://myserver.com/~dimon/rwfoo
REQUEST_URI /~dimon/rwfoo
SCRIPT_NAME /~dimon/test.php

相关内容