我希望apache跳过某些重写,以防请求的一部分短于255个字符(与缓存和linux中255个字符的文件名限制有关)。
我写过:
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顺便说一句。
答案 0 :(得分: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积分?