Apache-2.2

RedirectMatch 和查詢字元串

  • December 12, 2020

比較這兩個RedirectMatch。第一個不起作用:

RedirectMatch 302 ^/redirect\.php[?]page=(.+)$ http://somewhereelse.com/$1

與此相反,它將重定向到http://somewhereelse.com/?page=wherever

RedirectMatch 302 ^/redirect\.php([?]page=.+)?$ http://somewhereelse.com/$1

RedirectMatch只匹配 URI 而不是查詢字元串?Apache 的文件在這方面有點模糊。我要做的是提取page查詢參數並使用它重定向到另一個站點。

有可能RedirectMatch還是我必須使用RewriteCond+ RewriteRule

RedirectMatch不幸的是,在這種情況下無法使用;查詢字元串不是與之RewriteMatch比較的 URL 字元串的一部分。

第二個範例有效,因為客戶端發送的查詢字元串被重新附加到目標 URL - 因此可選匹配不匹配任何內容,$1替換為空字元串,但隨後客戶端的原始查詢字元串被卡住。

相反,將需要進行檢查RewriteCond%{QUERY_STRING}

RewriteCond %{QUERY_STRING} page=([^&]+)
RewriteRule ^/redirect\.php$ http://somewhereelse.com/%1? [R=302,L]

引用自:https://serverfault.com/questions/500961