簡體   English   中英

匹配GET參數時,mod_rewrite規則不起作用

[英]mod_rewrite rule won't work when matching GET parameters

我有這個RewriteRule:

RewriteRule ^wiki/search[.php]*?q=(.*)$ /wiki/search/$1 [R]

嘗試將格式/ wiki / search?q = search_query重寫為/ wiki / search / search_query,然后使用重寫

RewriteRule ^wiki/search/(.*)$ /wikisearch.php?id=$1 [L]

但是..只要我在第一個規則中有?q= ,它就根本行不通,而只給我一個404錯誤。 :(
為什么是這樣? 我不能在重寫規則中使用GET參數嗎?

正如您在docs中可以看到的那樣RewriteRule僅適用於“ URL路徑”,不包括查詢字符串:

在第一個RewriteRule上,它與請求的(%解碼的)URL路徑(或文件路徑,取決於上下文)匹配。 隨后的模式與最后一個匹配的RewriteRule的輸出匹配。

要在查詢字符串上進行匹配,可以使用RewriteCond ,然后在以下重寫規則中使用%0%1 ... %9引用匹配項和組。

RewriteCond %{QUERY_STRING} \bq=([^&]+)
RewriteRule ^wiki/search(?:\.php)?$ /wiki/search/%1

另一方面,您正在做的事情看起來很丑陋,我建議您避免使用這種無用的外部重定向( [R] )。 無需外部重定向即可重寫為所需的URL,或者更好地處理應用程序/腳本中的所有查詢字符串修改。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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