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

Псевдоним подстановочного знака Apache2

У меня есть следующий шаблон vHost:

<VirtualHost *:80>
    ServerAdmin hostmaster@example.de
    ServerName autodiscover.*.*
    ServerAlias autoconfig.*.*

    RewriteEngine On 
    RewriteCond %{HTTPS} !=on 
    RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R=301,L]
</VirtualHost>

Но мое RewriteRule неверно.

Например:

autoconfig.testdomain.de сопоставляется с https://autoconfig.testdomain.de

Что я хочу:

Я хочу проанализировать только часть поддомена в %{HTTP_HOST} к subdomain.example.de, но только если часть поддомена либо autoconfig или autodiscover

Вместо этого попробуйте следующее:

RewriteCond %{HTTP_HOST} ^([^.]+)
RewriteRule ^/(.*) https://%1.maindomain.de/$1 [R=301,L]

Нет необходимости проверять %{HTTPS} !=on поскольку вы находитесь в vHost для порта 80.

В RewriteCond директива захватывает только субдомен из запрошенного имени хоста (которое может быть только autoconfig или autodiscover из указанной конфигурации vHost). Затем на это ссылаются с помощью %1 обратная ссылка в RewriteRule замена строка.

Кроме того, вы можете явно проверить только autoconfig или autodiscover поддомены в условии:

RewriteCond %{HTTP_HOST} ^(autoconfig|autodiscover)\.

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

ServerName autodiscover.*.*

Я думаю, у вас должна быть более старая версия Apache, поскольку вы не можете использовать подстановочные знаки в ServerName директива в новых версиях Apache (в противном случае возникла бы двусмысленность, поскольку ServerName используется для создания самореферентных URL-адресов в определенных сценариях). Вы должны только указать подстановочные знаки в ServerAlias директива.

Это следует изменить на что-то вроде:

ServerName autodiscover.something.something
ServerAlias autodiscover.*.*
ServerAlias autoconfig.*.*