3

如果请求的一部分短于 255 个字符(与缓存和 linux 中的 255 个字符的文件名限制有关),我希望 apache 跳过某些重写。

我写了这个:

RewriteCond %{QUERY_STRING} "utm_campaign" 
RewriteCond %{QUERY_STRING} "utm_medium" 
RewriteCond %{QUERY_STRING} ^(.*\/)([^\/\n]{0,255})$ 
RewriteRule .* - [S=2] 

我针对 url ( q=path/to/page?utm_campaign=xxx&utm_medium=xxx) 测试了正则表达式,它匹配但 query_string 变量似乎有不同的内容,因为这之后的 2 条规则仍然被执​​行。在这种情况下应该匹配的部分page?utm_campaign=xxx&utm_medium=xxx(以及之后的所有内容)如果它少于 255 个字符,则可以跳过接下来的 2 个重写规则。

我正在使用 Drupal 6 顺便说一句。

4

1 回答 1

0

之前的部分?不在 %{QUERY_STRING} 中(在这种情况下与 PHP 中的 $_SERVER['QUERY_STRING'] 相反,因此会造成混淆),将 %{REQUEST_URI} 添加到 RewriteCond 解决了问题:

RewriteCond %{QUERY_STRING} "utm_campaign" 
RewriteCond %{REQUEST_URI}%_{QUERY_STRING} "utm_medium" 
RewriteCond %{QUERY_STRING} ^(.*\/)([^\/\n]{0,255})$ 
RewriteRule .* - [S=2] 

由于答案在评论中,因此不确定如何为此解决方案给予@Kamil Šrot 功劳?

于 2012-12-04T14:50:31.443 回答