【发布时间】:2012-12-04 09:59:37
【问题描述】:
如果请求的一部分短于 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 顺便说一句。
【问题讨论】:
-
你的规则是正确的,问题出在别的地方。我在您的陈述中看到了一些混乱...请注意,
mod_rewrite中可用的 apache 变量的内容如下:当访问的 URL 为http://www.example.com/path/file.ext?var=1&var2=2...%{REQUEST_URI}为/path/file.ext,%{QUERY_STRING}为var=1&var2=2...所以在您的示例中,page?不是变量的一部分...不确定,如果它有什么不同也不能解决您的问题 -
这确实是问题的关键,我应该使用:RewriteCond %{REQUEST_URI}_%{QUERY_STRING} ^(.*\/)([^\/\n]{0,255}) $(下划线代替问号)
标签: apache .htaccess mod-rewrite drupal-6