当禁用Apache mod_rewrite模块时,某些东西会重写php的规则

时间:2010-09-19 23:17:55

标签: php apache mod-rewrite

我运行以下网址:

http://localsite/index.php/foo/bar

执行index.php并输出变量:

$_SERVER[SCRIPT_FILENAME] = E:/path/to/file/index.php

Apache中的mod_rewrite被禁用。

谁重写规则?
或者会发生什么?

如何找到index.php?为什么apache决定运行它?

我的配置: Windows Vista,Apache Apache / 2.2.14(Win32)PHP / 5.3.1(带有php模块)。

(确实问题是规则实际上是在mod_rewrite之前重写的 - 这是启用mod_rewrite时。这会导致RewriteCond %{REQUEST_FILENAME} !-f始终为false,因为/foo/barRewriteCond之前被修剪

2 个答案:

答案 0 :(得分:3)

这是由AcceptPathInfo Apache指令引起的。

它将所有内容都视为

http://localsite/index.php

作为资源,并放置

/foo/bar

进入$_SERVER["PATH_INFO"]变量。

mod_rewrite不可用时,它有时被用作穷人的URL重写器 - 缺点是在正常配置中,URL中必须有.php

您可以选择关闭此功能,或使用其他网址 - 具体取决于您的具体情况。

答案 1 :(得分:0)

也许你应该使用$ _SERVER [REQUEST_URI],afaik,SCRIPT_FILENAME告诉你php启动了哪个文件。