htaccess检查查询字符串的一部分的长度

时间:2012-12-04 09:59:38

标签: apache .htaccess mod-rewrite drupal-6

我希望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顺便说一句。

1 个答案:

答案 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积分?