Перенаправление URL на новый домен с помощью htaccess - PullRequest
0 голосов
/ 18 октября 2019

Я хочу перенаправить некоторые URL-адреса старого сайта в определенное место назначения на новом сайте, а остальные URL-адреса - на домашнюю страницу. До сих пор я пробовал следующее:

  1. Используйте Redirect 301 / постоянная ссылка https://newsite.com/permalink1/ для всех ссылок, которые необходимо перейти на определенную страницу на новом сайте
  2. В остальном я добавил общее правило

    RewriteCond %{HTTP_HOST} ^oldsite\.com$ [NC]
    RewriteRule ^(.*)$ https://newsite.com [R=301,L]
    

, но это перенаправляет все страницы на домашнюю страницу нового сайта.

Затем япопытался заменить пункт 2 выше RedirectMatch

RedirectMatch 301 .* https://newsite.com

, но попытался найти точное совпадение на новом сайте. oldsite.com/xyz переходит к https://newsite.com/xyz

Кроме того, некоторые из старых URL-адресов сайтов имеют параметры, oldsite.com/a=?b=123 как перенаправить такие параметры на домашнюю страницу нового сайта.

Ответы [ 2 ]

0 голосов
/ 18 октября 2019

Это, вероятно, прямой подход:

RewriteEngine on

RewriteCond %{HTTP_HOST} ^oldsite\.com$
RewriteRule ^/?permalink1old(/.*)$ https://newsite.com/permalink1new$1 [R=301,QSA]

RewriteCond %{HTTP_HOST} ^oldsite\.com$
RewriteRule ^/?permalink2old(/.*)$ https://newsite.com/permalink2new$1 [R=301,QSA]

RewriteCond %{HTTP_HOST} ^oldsite\.com$
RewriteRule ^ https://newsite.com/ [R=301]

Таким образом, вы перенаправляете старые постоянные ссылки на старое имя хоста на их новый аналог на новом имени хоста, добавляя все, что может следовать по путиисходная старая постоянная ссылка, и вы добавляете строку запроса для сохранения аргументов.

Если постоянные ссылки никогда не содержат ничего дополнительного в своих путях, тогда вы можете упростить эти перенаправления, очевидно:

RewriteCond %{HTTP_HOST} ^oldsite\.com$
RewriteRule ^/?permalink1old/?$ https://newsite.com/permalink1new [R=301,QSA]

Хорошей идеей будет начать с временного перенаправления 302 и изменять толькоэто к 301 постоянному перенаправлению позже, как только вы уверены, что все правильно настроено. Это предотвращает проблемы с кэшированием при испытаниях ...

Эта реализация также будет работать в конфигурации хоста http-серверов или в файле динамической конфигурации (файл ".htaccess"). Очевидно, что модуль перезаписи должен быть загружен внутри http-сервера и включен на хосте http. Если вы используете динамический файл конфигурации, вам нужно позаботиться о том, чтобы его интерпретация вообще была включена в конфигурации хоста и чтобы он находился в папке DOCUMENT_ROOT хоста.

И общее замечание: вы всегда должны размещать такие правила в конфигурации хоста http-серверов, а не использовать файлы динамической конфигурации (".htaccess"). Эти динамические конфигурационные файлы добавляют сложность, часто являются причиной неожиданного поведения, их трудно отладить, и они действительно замедляют работу http-сервера. Они предоставляются только в качестве последнего варианта для ситуаций, когда у вас нет доступа к реальной конфигурации хоста http-серверов (читай: действительно дешевые поставщики услуг) или для приложений, настаивающих на написании своих собственных правил (что является очевидным кошмаром безопасности).

0 голосов
/ 18 октября 2019

Попробуйте это. Пусть это поможет вам.

RewriteEngine on 
RewriteRule ^(.*)$ http://newsite.com/$1 [R=301,L]
...