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

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

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

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

решение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перенаправлениевсе.

TheCondPatternв этой RewriteCondдирективе необходимо внести изменения, либо:

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

Но... поскольку у вас явно есть доступ к конфигурации сервера и вы работаете ввиртуальныйхостcontext, вам действительно не следует использовать 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>

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

Связанный контент