我在 Apache 上有一个基于 PHP 的博客,其中发生了一个简单的 mod_rewrite:
Options +FollowSymLinks
RewriteEngine On
RewriteRule ^(.*)$ index.php?story=$1 [L]
但是,当我在 PHP 脚本中查看 $_GET['story'] 时,它每次都会给我“index.php”。
有任何想法吗?
我在 Apache 上有一个基于 PHP 的博客,其中发生了一个简单的 mod_rewrite:
Options +FollowSymLinks
RewriteEngine On
RewriteRule ^(.*)$ index.php?story=$1 [L]
但是,当我在 PHP 脚本中查看 $_GET['story'] 时,它每次都会给我“index.php”。
有任何想法吗?
如果在传递期间发生任何导致内部或外部重定向的更改,Apache 将再次运行规则。您应该使用 index.php 的规则来捕捉这一点
RewriteRule ^index\.php$ - [L]
只是按原样使用该地址。这就是 WordPress 所做的。
根据您的 apache 版本,您可以使用 RewriteLogLevel 或 LogLevel 将重写日志级别设置为 8。在旧版本上,这必须在 httpd.conf 中完成,因此您需要一个本地测试站点。
不要离开该登录,否则您的性能将受到影响。
编辑:
这是在 L 标志下重新运行的文档中的引述:
如果您在 .htaccess 文件或部分中使用 RewriteRule,那么了解规则的处理方式非常重要。其简化形式是,一旦处理了规则,重写的请求就会被交回 URL 解析引擎来做它可能做的事情。处理重写的请求时,可能会再次遇到 .htaccess 文件或部分,因此可能会从头开始再次运行规则集。最常见的情况是,如果其中一个规则导致重定向(内部或外部)导致请求过程重新开始。