1

我想创建一个重写规则,以便

www.example.com/whatever/here

将映射到

www.example.com/index.php/whatever/here

所以这$_SERVER['PATH_INFO']是可用的。为此,我创建了以下规则集:

RewriteEngine On
RewriteCond {%REQUEST_FILENAME} !-f
RewriteCond {%REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1

只有这给了我一个 500 服务器错误。Apache 错误日志指出

[Sun Sep 30 17:23:08.758705 2012] [core:error] [pid 2584:tid 1704] [client ::1:58591] AH00124:由于可能的配置错误,请求超出了 10 个内部重定向的限制。如有必要,使用“LimitInternalRecursion”增加限制。使用“LogLevel debug”获取回溯。

但我看不到递归。当我尝试它时,让我们说一个查询:

RewriteRule ^(.*)$ index.php?route=$1

它按预期工作,但$_SERVER['PATH_INFO']不可用。


此外,在任何人问之前,我想要,$_SERVER['PATH_INFO']因为这样,我可以有像这样的复杂路径:

www.example.com/controller/action/data?more=data

如果我需要的话。

4

1 回答 1

1

RewriteCond如果那是您的真实代码,则您的服务器环境变量在 中指定不正确。如果不是一个完全 500 的解析错误,这将导致条件被忽略并且重写发生在每个请求上,从而导致循环。

RewriteEngine On
# The % goes outside the {}
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# And add a [L] flag
RewriteRule ^(.*)$ index.php/$1 [L]
于 2012-09-30T15:32:42.000 回答