1

我对 Apache Rewrites 很陌生,所以这可能是一个简单的问题(找到直接答案并不那么简单)。

所以我有以下重写:

RewriteCond %{QUERY_STRING} ^parm=([a-z]+)$ [NC]
RewriteRule ^path/to/some_script.php /simple-url-$1.html? [R=301,L]

这似乎在测试中按预期运行:

www.mydomain.com/path/to/some/script.php?parm=foo

正确的 301 到:

www.mydomain.com/simple-url-foo.html

但是,我担心的是,如果没有明确定义脚本的 RewriteCond,那么每个请求都会检查此条件,无论它是否针对 some_script.php... 会导致 Apache 产生不必要的负载。

是这样吗?如果是这样,我无法弄清楚在这种情况下如何使用 REQUEST_URI,即 IE:

RewriteCond %{REQUEST_URI} ^path/to/some_script.php [NC]
RewriteCond %{QUERY_STRING} ^parm=([a-z]+)$ [NC]
RewriteRule ^path/to/some_script.php /simple-url-$1.html? [R=301,L]

以上似乎不起作用,我不确定为什么。任何指针?

4

1 回答 1

2

简短的回答,%{REQUEST_URI}条件是不必要的。

通过添加条件,您只是将请求 URI 比较移动到查询字符串之前。它仍将与每个请求进行比较。事实上,这让情况变得更糟了,因为 for 的比较some_script.php会发生两次。一次进入,RewriteCond一次进入RewriteRule

而且,使用您的原始设置,并不是每个请求 URI 都在检查some_script.php. %{QUERY_SRING}还确保仅对带有parm查询参数的请求进行比较。

于 2013-08-23T01:49:34.607 回答