我有一個格式為的 URL http://www.example.com/?s=query
我想將此 URL 重定向到 http://www.example.com/search/query
我有以下內容,.htaccess但我想檢查一下是否有任何問題。我的RewriteRule看起來有點不穩定,我不知道它是否會導致其他 URL 出現問題。
RewriteEngine on
RewriteCond %{QUERY_STRING} ^s=(.*)$ [NC]
RewriteRule ^$ /search/%1? [NC,L,R]
我在這里運行了一個測驗,它似乎重定向到正確的 URL。
uj5u.com熱心網友回復:
RewriteCond %{QUERY_STRING} ^s=(.*)$ [NC] RewriteRule ^$ /search/%1? [NC,L,R]
如果您收到 %-encoded URL 引數值,您可能需要在指令上使用NE( noescape) 標志RewriteRule,否則目標 URL 將被雙重編碼。該QUERY_STRING服務器變數不是由Apache的解碼。
這也取決于你如何改寫/search/query回/?s=query(或可能更喜歡/index.php?s=query?) -想必你已經在配置后這樣做呢?您只希望此重定向應用于直接請求而不是重寫請求(否則您將獲得重定向回圈)。確保這一點的一種簡單方法是檢查REDIRECT_STATUSenv var 是否為空。
例如:
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{QUERY_STRING} ^s=(.*) [NC]
RewriteRule ^$ /search/%1 [NE,QSD,R,L]
其他要點:
- 該
QSD標志最好(在 Apache 2.4 上)附加?到susbtitution字串的末尾以洗掉查詢字串。 - 正則運算式
^s=(.*)(尾部$是多余的)確實假定這s是查詢字串開頭的唯一 URL 引數。就目前而言,一切都被假定為該值的一部分。例如。s=foo&bar=1將導致/search/foo&bar=1. - 在
NC該標志RewriteRule指示是多余的。 - 你還應該檢查
/index.php?s=<query>嗎?(或者任何檔案/目錄索引正在處理請求。)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/345254.html
