апач - строка запроса переписывает правило, добавляет условие к URL

В попытке переписать

site-search.html?searchword=search%20term 

как

advanced-search#q=search%20term

Я всегда заканчиваю с advanced-search#q=%3Fsearchword%3search%20term

%3Fsearchword%3 часть загадочно добавляется к сгенерированному URL прямо перед критерием поиска.

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

RewriteCond %{REQUEST_URI}  ^/site-search\.html$
RewriteCond %{QUERY_STRING} ^searchword=(.*)$
RewriteRule ^(.*)$ http://www.example.com/advanced-search#q=%1 [R=301,L,NE]

Стоит упомянуть, что это не имеет никакого значения, что я поместил после "q =". Та же ошибка или небольшое изменение к произойдут независимо.

1
задан 14 July 2014 в 09:59
2 ответа

После настройки паттена на соответствие и добавления ? к целевому URL, синтаксис, наконец, работает, как и планировалось.

RewriteCond %{REQUEST_URI}  ^/site-search\.html$
RewriteCond %{QUERY_STRING} ^searchword=([^&]+)
RewriteRule ^([^&]+) http://www.domain.com/advanced-search?#q=%1 [R=301,L,NE]

The ? в целевом URL не позволяет повторить исходную строку запроса. Если вы используете Apache 2.4, то того же результата можно добиться, передав флаг QSD правилу rewire.

Также, если целевой URL содержит символ # (идентификатор фрагмента), не забудьте поместить ? перед ним

.
0
ответ дан 4 December 2019 в 00:22

%1 RewriteRule's %1 приходит из того же самого условия RewriteRule (.*), и вы сравниваете строку запроса там с самим URI.

Решение 1: Переместите или скопируйте ваш паттерн во втором RewriteCond'е в условие RewriteRule's.

Основываясь на комментариях и предположении, чего бы вы хотели достичь, как-то так:

RewriteCond %{HTTP_HOST} ^(www\.)?domain.com$
RewriteCond %{REQUEST_URI}  ^/site-search\.html$
RewriteRule [?&]searchword=([^&]*) http://www.domain.com/advanced-search#q=%1 [R=301,L,NE]

Решение 2: исследуем флаг [QSA] RewriteRule, который добавляет всю строку запроса к результирующему uri для вас. (не для Apache 2.2)

.
1
ответ дан 4 December 2019 в 00:22

Теги

Похожие вопросы