Назад | Перейти на главную страницу

Перенаправить весь домен на одну страницу на другом домене в виртуальном хосте 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. Как я могу изменить это так, чтобы он переходил на конкретную страницу?

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. Вы должны создать отдельный vhost, один для 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: эти vhosts предназначены только для HTTP (порт 80), поэтому вам, естественно, потребуется повторить перенаправление для HTTPS (порт 443).