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]