Моя проблема в том, что я хочу перенаправить ссылки, содержащие конкретную фразу и конкретную строку запроса после вопросительного знака.
Например - перенаправление с:
http://example.com/first-category?p=1
на:
http://example.com/second-category
У меня есть код в .htaccess
, который перенаправляет все ссылки, содержащие p = 1
после вопросительного знака:
RewriteCond %{QUERY_STRING} p=1 [NC]
RewriteRule .* http://example.com/second-category? [R=301,L]
Но, как я уже сказал, - ? p = 1
существует в ссылках на множество страниц (категории, производители, информационные страницы блогов и т. д.), и приведенный выше код перенаправляет все мои страницы с ? p = 1
на ] / вторая категория
, что неверно.
Мне нужно определить другое условие (это точки, содержащие фразу первой категории
ПЕРЕД вопросительным знаком), но этот код работает некорректно:
RewriteCond %{REQUEST_URI} first-category
RewriteCond %{QUERY_STRING} p=1 [NC]
RewriteRule .* http://example.com/second-category? [R=301,L]
Есть идеи, как это исправить? Я не уверен, что здесь неверно.
RewriteCond %{REQUEST_URI} first-category RewriteCond %{QUERY_STRING} p=1 [NC] RewriteRule .* http://example.com/second-category? [R=301,L]
Это должно "работать", таким образом, вероятно, что у Вас есть кэширующаяся проблема. Более раннее 301 (постоянное) перенаправление, которое перенаправило все на основе строки запроса только, будет кэшироваться браузером.
Однако Вам не нужен другой условие . Первый аргумент RewriteRule
директива (т.е. шаблон ) уже соответствует пути URL. В этом примере, .*
соответствия все , таким образом, необходимо сделать это более строгим.
Также примечание, что этими аргументами являются регулярные выражения, таким образом p=1
"p=1" соответствий где угодно в строке запроса, не только в запуске, как в Вашем примере. Аналогично, first-category
соответствовал бы "первой категории" где угодно в пути URL, не только в запуске, как в Вашем примере.
Попытка следующее вместо этого:
RewriteCond %{QUERY_STRING} ^p=1$
RewriteRule ^first-category$ http://example.com/second-category? [R=301,L]
Это соответствует точно запрос /first-category?p=1
(чувствительный к регистру). Обратите внимание, что префикс наклонной черты на RewriteRule
шаблон опущен в контекст каталога .
Эти NC
флаг на условии не требуется, если Вы явно не должны соответствовать P=1
также.
, Если Вы находитесь на Apache 2.4 + затем, можно использовать QSD
флаг (Query String Discard) вместо того, чтобы добавить одинокое ?
в конец замена строка для предотвращения строки запроса от запроса, неявно скопированного в замена .
необходимо будет очистить кэш браузера перед тестированием. Рекомендуется протестировать с 302 (временными) перенаправлениями, чтобы не кэшировать проблемы.