Назад | Перейти на главную страницу

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

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

index.php? option = com_finder & view = search & f = 1 & Itemid = 365 & q = the% 2520emperor% 2527s% 2520new% 2520school

вместо того

index.php? option = com_finder & view = search & f = 1 & Itemid = 365 & q = the% 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]

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

site-search.html? searchword = someword

так как

поиск по всему сайту? q = someword

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

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

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

от & q =% 1 [L, R = 301]

to & 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]