Перенаправить весь домен на одну страницу на другом домене в виртуальном хосте Apache

Есть много информации о перенаправлении всего домена в другой, но я не могу найти ответов на вопросы о перенаправлении домена на определенную страницу во втором домене. Вот что я установил:

<VirtualHost *:80>
    ServerName www.domain2.org.uk
    ServerAlias domain2.org.uk domain1.co.uk www.domain1.co.uk
    DocumentRoot /var/www/html
    ErrorLog logs/mkt-error_log
    CustomLog logs/mkt-access_log common
    RewriteEngine On
    RewriteCond %{HTTP_HOST} !domain1.co.uk$ [NC]
    RewriteRule ^(.*)$ https://www.domain2.org.uk/specific-page/ [L,R=301]
</VirtualHost>

Это перенаправляет, но только на страницу по умолчанию для домена 2. Как я могу изменить это так, чтобы он переходил на конкретную страницу?

0
задан 21 July 2019 в 19:55
1 ответ
 RewriteRule  ^ (. *) $ https://www.domain2.org.uk/specific-page/ [L, R = 301]
 

Это уже делает то, что вам нужно, и перенаправляет все на https://www.domain2.org.uk/specific-page/ - как указано в RewriteRule замена . (Хотя шаблон RewriteRule излишне захватывает обратную ссылку.)

 RewriteCond% {HTTP_HOST}! Domain1.co.uk $ [NC]
 

ОДНАКО (если это не опечатка в приведенном в качестве примера фрагменте кода) условие (которое проверяет, что заголовок Host не заканчивается , а не на domain1.co.uk ) приведет к возникновению цикла перенаправления ( domain2.org.uk , очевидно, не domain1.co.uk , поэтому условие всегда выполняется). И следующее RewriteRule перенаправляет все .

CondPattern в этой директиве RewriteCond необходимо изменить одним из следующих способов:

  • Удаление префикса ! (отрицание). (Хотя конечный $ по-прежнему вызовет проблемы с полным доменным именем, заканчивающимся точкой.)
  • ИЛИ, измените значение на ! Domain2 \ .org \ .uk $

Но .. .. поскольку у вас явно есть доступ к конфигурации сервера и вы работаете в контексте виртуального хоста , вам не следует использовать для этого mod_rewrite. Вы должны создать отдельный виртуальный хост, один для domain1 , другой для domain2 и вместо этого использовать директиву mod_alias RedirectMatch ... менее подвержен ошибкам, более эффективен .

Например:

<VirtualHost *:80>
    ServerName domain1.org.uk
    ServerAlias www.domain1.org.uk
    RedirectMatch 301 ^ https://www.domain2.org.uk/specific-page/
</VirtualHost>

<VirtualHost *:80>
    ServerName domain2.org.uk
    ServerAlias www.domain2.org.uk
    DocumentRoot /var/www/html
    ErrorLog logs/mkt-error_log
    CustomLog logs/mkt-access_log common
</VirtualHost>

NB: Эти хосты предназначены только для HTTP (порт 80), поэтому вам, естественно, потребуется повторить перенаправление для HTTPS (порт 443).

2
ответ дан 4 December 2019 в 13:19

Теги

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