перенаправление httaccess 301 без переменных URL

#.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 (если таково намерение), когда вы уверены, что оно работает нормально, чтобы избежать потенциальных проблем с кэшированием.

Вам нужно будет очистить кэш вашего браузера перед тестированием.