我有一個包含以下 htaccess 檔案的站點:
RewriteCond %{THE_REQUEST} \s/ (. ?)\index.html/?[\s?] [NC]
RewriteRule ^ /%1 [R=302,NE,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ ./index.php?uri=$1 [NC,L,QSA]
我需要將兩個頁面重定向到不同的域。目前,我使用以下行將它們設定為 302 重定向:
Redirect 302 /some-url-slug https://example.com/some-new-url-slug
這確實可以重定向到新域,但問題是它將 uri 引數添加到重定向的 url,所以我得到如下內容:
https://example.com/some-new-url-slug?uri=some-url-slug
我認為在重寫規則之上添加它可以解決它,但事實并非如此。我怎樣才能省略該規則,但僅適用于 2 個特定頁面?
uj5u.com熱心網友回復:
我認為在重寫規則之上添加它會解決它
該Redirect指令屬于 mod_alias,其他指令是 mod_rewrite。不管你把Redirect指令放在哪里,它總是在mod_rewrite之后處理。和Redirect指令將保留查詢字串。
對于這兩個特定的重定向,您需要RewriteRule在檔案頂部使用 mod_rewrite。例如:
RewriteRule ^some-url-slug$ https://example.com/some-new-url-slug [QSD,R=302,L]
請注意,該RewriteRule指令匹配的 URL 路徑不以斜杠開頭。( QSDQuery String Discard) 標志確保丟棄初始請求中可能存在的任何查詢字串(否則默認情況下會通過)。
更新:
我剛剛意識到在 URL 中添加尾隨 / 會加載原始頁面。我是否需要為帶有斜杠的鏈接創建單獨的重定向規則?
您可以將其包含在同一規則中,并通過在模式末尾添加附加斜杠使尾部斜杠可選/?。例如:
RewriteRule ^some-url-slug/?$ https://example.com/some-new-url-slug [QSD,R=302,L]
這現在匹配some-url-slug or some-url-slug/并像以前一樣重定向到 URL。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/459223.html
下一篇:HTACCESS-使用BrowserMatchNoCase阻止多個版本的過時瀏覽器(Chrome/Firefox)
