#.htaccess #redirect #http-status-code-301
#.htaccess #перенаправление #http-status-code-301
Вопрос:
У меня возникла проблема с перенаправлением 301.
Мой старый URL-адрес
https://example.com/es/component/users/registration?item=21
Новый
https://example.com/es/login/registro
Итак, я написал это в .htaccess
:
RewriteRule ^es/component/users/registration/?item=21$ "https://mywebsite.com/es/login/registro" [R=301,L]
Но он перенаправляет на https://mywebsite.com/es/login/registro?item=21
как я могу избавиться и от этой ?item=21
строки?
Ответ №1:
Опубликованная вами директива фактически не выполняла бы перенаправление, как указано, если ?
только URL-адрес не был закодирован (as ?
) в запросе, и фактической строки запроса нет? Или вы видите кэшированный ответ от более ранней (ошибочной) попытки? (301 перенаправление будет постоянно кэшироваться браузером.)
RewriteRule
Шаблон соответствует только URL-пути, а не строке запроса. Для сопоставления со строкой запроса вам нужна дополнительная RewriteCond
директива и проверка по переменной QUERY_STRING
сервера.
Вместо этого попробуйте следующее:
RewriteCond %{QUERY_STRING} ^item=21$
RewriteRule ^es/component/users/registration$ /es/login/registro [QSD,R=302,L]
Флаг QSD
(Отбрасывание строки запроса) (Apache 2.4 ) удаляет строку запроса из ответа перенаправления. В противном случае действие по умолчанию заключается в добавлении строки запроса из запроса. Если вы используете Apache 2.2, вам нужно будет вместо этого добавить a ?
в конец строки подстановки (по сути, добавив пустую строку запроса).
Нет необходимости экранировать косую черту в RewriteRule
шаблоне.
Сначала протестируйте перенаправление 302 (временное), прежде чем переходить на 301 (если таково намерение), когда вы уверены, что оно работает нормально, чтобы избежать потенциальных проблем с кэшированием.
Вам нужно будет очистить кэш вашего браузера перед тестированием.