Как удалить все? Исходный код строки в URL с правилом перезаписи для перенаправления 301 - PullRequest
1 голос
/ 18 февраля 2020

Пожалуйста, помогите мне написать правильный RewriteRule для редиректа 301 (.htaccess под поддоменом blog.example.com) для таких ссылок, как:

из

https://blog.example.com/?source=tag_archive---------0-----------

редирект на

https://example.com/blog/

Я использую эти строки в .htaccess:

RewriteEngine on
RewriteCond %{HTTP_HOST}  ^blog\.example\.com$ [NC]
RewriteCond %{QUERY_STRING}  ^source=tag_archive---------0-----------(&.*)?$ [NC]
RewriteRule ^(.*)$ https://example.com/blog/  [R=301,NE,NC,L]

С примером выше я получил

https://example.com/blog/?source=tag_archive---------0-----------

, но мне нужно

https://example.com/blog/

(без детали ?source=tag_archive---------0-----------)

1 Ответ

0 голосов
/ 18 февраля 2020

В Apache 2.4+ вам необходимо добавить флаг QSD (Query String Discard) в директиву RewriteRule:

RewriteRule ^ https://domainname.com/blog/  [QSD,R=301,L]

(В качестве альтернативы, если вы все еще используете Apache 2.2, затем добавьте ? в конец строки замены - фактически пустую строку запроса. Сам ? не будет в ответе на перенаправление.)

^(.*)$ (шаблон RewriteRule ) - поскольку вы соответствуете любому URL-пути и не используете обратную ссылку, это можно упростить до ^.

Флаги NC и NE здесь не требуются.

Однако, как отмечено выше, это перенаправляет любой URL-путь. Если вы хотите перенаправить https://blog.example.com/?source=tag... only , измените шаблон RewriteRule на ^$ (пустой URL-путь). Например:

RewriteRule ^$ https://domainname.com/blog/  [QSD,R=301,L]
...