[英]htaccess Redirect URL with GET Parameters
我有一個格式為http://www.example.com/?s=query
的 URL
我想將此 URL 重定向到http://www.example.com/search/query
我有以下.htaccess
但我想檢查一下是否有任何問題。 我的RewriteRule
看起來有點不穩定,我不知道它是否會導致其他 URL 出現問題。
RewriteEngine on
RewriteCond %{QUERY_STRING} ^s=(.*)$ [NC]
RewriteRule ^$ /search/%1? [NC,L,R]
我在這里運行了一個測試,它似乎重定向到正確的 URL。
RewriteCond %{QUERY_STRING} ^s=(.*)$ [NC] RewriteRule ^$ /search/%1? [NC,L,R]
如果您收到 %-encoded URL 參數值,您可能需要RewriteRule
指令上的NE
( noescape
) 標志,否則目標 URL 將被雙重編碼。 QUERY_STRING
服務器變量不是由 Apache 解碼的。
它還取決於您如何將/search/query
重寫回/?s=query
(或者可能更像/index.php?s=query
?) - 大概您已經在稍后的配置中這樣做了? 您只希望此重定向應用於直接請求而不是重寫請求(否則您將獲得重定向循環)。 確保這一點的簡單方法是檢查REDIRECT_STATUS
變量是否為空。
例如:
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
。RewriteRule
指令上的NC
標志是多余的。/index.php?s=<query>
嗎? (或者任何文件/目錄索引正在處理請求。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.