[英]301 Redirect for Query String on Root?
我嘗試了多種方法來嘗試重定向根目錄上帶有查詢字符串的某些URL,例如,如果我嘗試匹配URL http://example.com/?bloginfo=racing
Redirect 301 "/?bloginfo=racing" http://example.com/racing
要么
RedirectMatch 301 ^/?bloginfo=racing$ http://example.com/racing
條件將永遠不匹配。 在我的.htaccess
文件中是否有很好的方法可以編寫這種重定向?
如果要匹配查詢字符串,則需要使用mod_rewrite並在RewriteCond
指令中檢查QUERY_STRING服務器變量。 mod_alias指令(即Redirect
和RedirectMatch
僅匹配URL路徑,而不匹配查詢字符串)。
例如,要將http://example.com/?bloginfo=racing
重定向到http://example.com/racing
您可以執行以下操作:
RewriteEngine On
RewriteCond %{QUERY_STRING} ^bloginfo=racing$
RewriteRule ^$ /racing? [R=302,L]
尾隨?
為了從請求中刪除查詢字符串,必須使用替換上的,否則會將其傳遞到目標URL。 或者,在Apache 2.4+上使用QSD
標志
如果打算將其從302(臨時)更改為301(永久),並且僅在您確定其工作正常(避免緩存問題)時更改為301(永久)。
要使其更通用,並將/?bloginfo=<something>
重定向到/<something>
則可以執行以下操作:
RewriteCond %{QUERY_STRING} ^bloginfo=([^&]+)
RewriteRule ^$ /%1? [R=302,L]
%1
是對最后一個匹配CondPattern中捕獲的子模式的反向引用。
查詢字符串是與請求URI分開的變量,因此您必須執行以下操作:
RewriteEngine On
RewriteCond %{QUERY_STRING} bloginfo=racing
RewriteRule ^$ /racing [L,R]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.