Перезапись Apache: sub.DOM1.TLD1 / path> sub.DOM2.TLD2 / path

... ответ MAYBE-dup действительно решает мою проблему, но вопрос - нет.

Сделайте ДВА вещи:

  1. Сохранять субдомен до

  2. Сохранять путь после

Я не могу найти ОДИН .htaccess или конфигурацию Apache, которая выполняет ОБА в любом месте на SE или в другом месте в Интернете:

Через Apache .htaccess перезаписать, перенаправить старый домен, но оставить ОБА на том же субдомене И путь / после .

От:

samesubdomain. domain1.tld1 / same / path

Кому:

samesubdomain. domain2.tld2 / same / path

У меня много поддоменов И конечных адресов. Я переношу старый сайт, но мне нужно, чтобы мои старые подписки и их страницы по-прежнему работали в новом домене.


Непрерывные дубликаты: (Ответы касаются моей проблемы, но сам вопрос не описывает моя проблема, но это также решило мою проблему.)

Перенаправить поддомен с подстановочными знаками на тот же поддомен в другом домене


Любезно МОЖЕТ быть-дублированный ответ , для поддомена у меня в настоящее время есть:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^(.+\.)?domain1.com$ [NC]
RewriteRule ^ http://%1domain2.com%{REQUEST_URI} [R=301,L]

... теперь мне нужно добавить половину / path БЕЗ конфликта с этим кодом.

1
задан 18 June 2019 в 13:41
1 ответ

Хотя в связанном вопросе это конкретно не говорится, код действительно копирует URL-путь (и любую строку запроса). Хотя, по общему признанию, ответов нет для какого-либо объяснения.

Предположения:

  • Поддомен существует всегда. Итак, вы не хотите перенаправлять вершину домена. т.е. domain1.tld1 (без поддомена) не перенаправляет на domain2.tld2 .

В верхней части корневого файла .htaccess :

RewriteEngine On

RewriteCond %{HTTP_HOST} ^([^.]+)\.domain1\.tld1 [NC]
RewriteRule (.*) https://%1.domain2.tld2/$1 [R=302,L]

Директива RewriteCond захватывает субдомен из запроса. Обратная ссылка % 1 в подстановке RewriteRule является обратной ссылкой на захваченный субдомен (то есть ([^.] +) ).

] Обратная ссылка $ 1 содержит URL-путь, захваченный шаблоном RewriteRule , т.е. (. *) .

Обратите внимание, что я специально пропустил завершающий $ (привязку конца строки) в CondPattern , чтобы соответствовать FQDN , которые заканчиваются точкой.

Любая строка запроса передается без изменений.

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

 RewriteEngine On
RewriteCond% {HTTP_HOST} ^ (. + \.)? Domain1.com $ [NC]
RewriteRule ^ http: //%1domain2.com% {REQUEST_URI} [R = 301, L]
 

... теперь мне нужно добавить половину пути / БЕЗ конфликта с этим кодом.

Код уже содержит часть пути URL.Это часть % {REQUEST_URI} в строке подстановки RewriteRule . Переменная сервера REQUEST_URI содержит полный URL-путь. Это просто еще один способ сделать то же самое, что и выше - вместо этого я использовал обратную ссылку $ 1 . (Обратите внимание, что серверная переменная REQUEST_URI содержит префикс косой черты, тогда как использованная мной обратная ссылка не содержит, отсюда разница в косых чертах в строке подстановки .)

Этот код отсутствует экранирование обратной косой черты на буквальной точке в .com .

Обратите внимание, что это решение делает субдомен необязательным . Он перенаправит domain1.com (без поддомена) на domain2.com .

1
ответ дан 3 December 2019 в 23:03

Теги

Похожие вопросы