我希望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