apache - правило перезаписи строки запроса добавляет символ процента

Я установил правило, чтобы переписать строку запроса. Хотя перенаправление выполняется правильно, к переписанной части запроса URL добавляется символ%, например, так:

index.php? вариант =com_finder& вид = поиск & F =1&Itemid=365& Q = папке%2520emperor%2527s%2520new%2520school

вместо

index.php? вариант =com_finder& вид = поиск & F =1&Itemid=365& Q = в%20emperor%27s%20new%20school

Правило перезаписи устанавливается следующим образом:

RewriteCond %{REQUEST_URI}  ^/site-search\.html$
RewriteCond %{QUERY_STRING} ^searchword=(.*)$
RewriteRule ^(.*)$ http://www.example.com/index.php?option=com_finder&view=search&f=1&Itemid=365&q=%1 [L,R=301]

Моя цель переписать

сайт-search.html? = someword Поиск слова

как

полный сайт-поиск? д = someword

Что-то не так в синтаксисе?

2 ответа

Вы очень близки к правильному формату.

Попробуйте изменить последнюю часть последней строки

из &q=%1 [L,R=301]

до &q=$1 [L,R=301]

Я столкнулся с той же проблемой с Apache/2.2.15. Мое решение состояло в том, чтобы использовать RewriteMap с внутренней функцией " unescape ". Использование этого дважды выполняет двойное декодирование URL, обходя проблему.

Демонстрация на вашем примере:

RewriteMap unesc int:unescape

RewriteCond %{REQUEST_URI}  ^/site-search\.html$
RewriteCond %{QUERY_STRING} ^searchword=(.*)$
RewriteRule ^(.*)$ http://www.example.com/index.php?option=com_finder&view=search&f=1&Itemid=365&q=${unesc:${unesc:%1}} [L,R=301]
Другие вопросы по тегам