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