我运行以下网址:
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/bar
在RewriteCond
之前被修剪
答案 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启动了哪个文件。