Я установил правило для перезаписи строки запроса. Хотя перенаправление выполняется правильно, к перезаписанной части 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]