簡體   English   中英

htaccess 使用 GET 參數重定向 URL

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM