我希望apache跳过某些重写,以防部分请求短于255个字符(与缓存和Linux中的255字符文件名限制有关)。htaccess查询查询字符串的一部分的长度
我写这样的:
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 btw。
你的规则是正确的,问题在于别的。我在你的语句中看到一些混淆......请注意,'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})$(下划线代替问号) – MidnightMotion