0

我在 Apache 上有一个基于 PHP 的博客,其中发生了一个简单的 mod_rewrite:

Options +FollowSymLinks
RewriteEngine On

RewriteRule ^(.*)$ index.php?story=$1 [L]

但是,当我在 PHP 脚本中查看 $_GET['story'] 时,它每次都会给我“index.php”。

有任何想法吗?

4

1 回答 1

1

如果在传递期间发生任何导致内部或外部重定向的更改,Apache 将再次运行规则。您应该使用 index.php 的规则来捕捉这一点

RewriteRule ^index\.php$ - [L]

只是按原样使用该地址。这就是 WordPress 所做的。

根据您的 apache 版本,您可以使用 RewriteLogLevel 或 LogLevel 将重写日志级别设置为 8。在旧版本上,这必须在 httpd.conf 中完成,因此您需要一个本地测试站点。

不要离开该登录,否则您的性能将受到影响。

编辑:

这是在 L 标志下重新运行的文档中的引述:

如果您在 .htaccess 文件或部分中使用 RewriteRule,那么了解规则的处理方式非常重要。其简化形式是,一旦处理了规则,重写的请求就会被交回 URL 解析引擎来做它可能做的事情。处理重写的请求时,可能会再次遇到 .htaccess 文件或部分,因此可能会从头开始再次运行规则集。最常见的情况是,如果其中一个规则导致重定向(内部或外部)导致请求过程重新开始。

于 2013-03-29T23:33:13.153 回答