我想通過附加字串將帶有查詢字串的每個鏈接重定向到特定地址。我的 WordPress 中有以下內容.htaccess:
RewriteEngine On
RewriteCond %{QUERY_STRING} catid=([0-9] ) [NC]
RewriteRule (.*) catid%1? [R=301,L]
當用戶點擊 時example.com/?catid=10,他們會成功重定向到example.com/catid10,這正是我想要的。
但是,當它們進入更深的目錄 ( example.com/category/?catid=10) 時,它們不會重定向到example.com/category/catid10.
我一直在閱讀手冊,但找不到答案。
編輯
如果這有幫助,這就是 WordPress 在我的 htaccess 中定義的內容:
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
uj5u.com熱心網友回復:
提供RewriteBase /已經定義(通常是 WordPress 并且必須是如果您現有的重定向有效)然后您可以使用單個規則執行以下操作:
RewriteCond %{QUERY_STRING} (?:^|&)catid=(\d ) [NC]
RewriteRule (.*?)/?$ $1/catid%1 [QSD,R=301,L]
捕獲組(.*?)是非貪婪的,因此不會消耗后面的可選尾部斜杠。
對檔案根目錄的請求不需要RewriteBase,但所有“更深”的 URL 都需要,因為否則生成的替換字串將是一個相對URL。
CondPattern(?:^|&)上的非捕獲前綴確保它只匹配 URL 引數名稱而不匹配等。catidfoocatid
uj5u.com熱心網友回復:
您只需要使用 將捕獲的組添加(.*)到重定向目標$1。我會把它分解成一些規則,這樣你就不會得到重復的斜杠。而不是用問號結束重寫目標,我會將QSD(查詢字串丟棄)標志添加到規則中。我還會添加以 ( ^)開頭并以 ( ) 結尾的$重寫規則,以便您始終匹配整個事物。我還喜歡以可選的斜杠 ( /?)開始我的規則,以便這些規則可以在 .htaccess 和 apache conf 中使用。
RewriteEngine On
# Home URL with catid query string
RewriteCond %{QUERY_STRING} catid=([0-9] ) [NC]
RewriteRule ^/?$ /catid%1 [R=301,L,QSD]
# Deep URL ending in slash with a catid query string
RewriteCond %{QUERY_STRING} catid=([0-9] ) [NC]
RewriteRule ^/?(.*)/$ /$1/catid%1 [R=301,L,QSD]
# Deep URL not ending in slash with a cadid query string
RewriteCond %{QUERY_STRING} catid=([0-9] ) [NC]
RewriteRule ^/?(.*)$ /$1/catid%1 [R=301,L,QSD]
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/370573.html
標籤:正则表达式 WordPress的 阿帕奇 .htaccess 重定向
