原始地址 -example.com/index.php?c=bs
或沒有index.php- 即只是 -example.com/?c=bs
我在地址欄中想要什么 - example.com/blue-sky
這是我的嘗試 - 沒有成功:
RewriteEngine ON
RewriteCond %{THE_REQUEST} \?c=bs [NC]
RewriteRule ^ %1? [R=301,L,NE]
RewriteRule ^([^/.] )/?$ ?c=blue-sky [L,QSA]
請幫忙
uj5u.com熱心網友回復:
我在地址欄中想要什么 -
example.com/blue-sky
假設您已經更改了指向此所需規范URL 的內部鏈接,那么您可以執行以下操作以.htaccess從外部重定向/index.php?c=bs(或/?c=bs)以/blue-sky實作 SEO。隨后進行重寫以在內部重寫請求以/blue-sky回傳/index.php?c=bs.
例如(假設您使用的是 Apache 2.4):
RewriteEngine On
# Redirect "/index.php?c=bs" (or "/?c=bs") to "/blue-sky"
RewriteCond %{QUERY_STRING} ^c=bs$
RewriteRule ^(index\.php)?$ /blue-sky [QSD,R=301,L]
# Rewrite (internally) "/blue-sky" back to "/index.php?c=bs"
RewriteRule ^blue-sky$ index.php?c=bs [QSA,END]
更新:第一條規則上的QSD標志需要c=bs從重定向回應中丟棄原始查詢字串(即。)。否則,它將重定向到/blue-sky?c=bs. 這需要 Apache 2.4
第二條規則上的QSA標志允許附加初始請求中可能存在的任何其他查詢字串引數。例如。/blue-sky?foo=1將被重寫為index.php?c=bs&foo=1. 如果這不是必需的并且您不期望任何其他查詢字串,則洗掉該QSA標志。
該END標志(與 相對L)防止重寫引擎進一步回圈,從而防止重寫的 URL 被重定向回規范 URL(否則會導致無限的重定向回圈)。該END標志需要 Apache 2.4。
看看你的指令:
RewriteCond %{THE_REQUEST} \?c=bs [NC] RewriteRule ^ %1? [R=301,L,NE] RewriteRule ^([^/.] )/?$ ?c=blue-sky [L,QSA]
第一條規則實質上將重定向/<anything>?c=bs回檔案根目錄,除了%1反向參考為空且沒有RewriteBase指令外,這將導致格式錯誤的重定向,從而暴露絕對檔案系統目錄。
第二條規則重寫/<anything>為?c=blue-sky,大概應該是c=bs(但這會導致重定向回圈,因為重寫引擎使用L,而不是重新開始END)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/415611.html
標籤:
