2013-06-09 1 views
0

У меня есть этот RewriteRule:правило mod_rewrite не будет работать при согласовании параметров GET

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

в попытке переписать формат/вики/поиск д = search_query в/вики/поиск/SEARCH_QUERY, который затем? переписана с использованием

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

Однако .. до тех пор, как у меня есть ?q= в первом правиле он просто не будет работать, а просто оставляет меня с ошибкой 404. :(
Почему это я могу не использовать параметры GET в правила перезаписи или что-то

ответ

1

Как вы можете read in the docs, RewriteRule относится только к «URL-путь», не включая строку запроса:?

В первом RewriteRule он сопоставляется с (% -декодированным) URL-адресом (или файловым путем, в зависимости от контекста) запроса. Последующие шаблоны сопоставляются с выходом последнего совпадающего RewriteRule.

Чтобы соответствовать строке запроса, вы может использовать RewriteCond, а позже ссылаться на матч и группы в следующем правиле перезаписи с %0 и %1 ... %9.

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

С другой стороны, то, что вы делаете, кажется, довольно некрасиво, и я бы посоветовал вам избегать таких бесполезных внешних переадресаций ([R]). Перепишите на нужный URL без внешних перенаправлений или лучше обработайте все модификации строки запроса в вашем приложении/скрипте.