Псевдонимы перенаправления Apache VHost на HTTPS

Я пытаюсь установить виртуальные хосты на моем "игровом" VPS.

Мне нужно перенаправить 3 или более доменов на главный.

Также он должен перенаправлять HTTPS, Lets Encrypt настроен и работает нормально.

В текущем состоянии эта конфигурация работает нормально, НО когда пользователь переходит на HTTPS secsite.com вручную (вводя HTTPS сам), он сначала перенаправляет на основной сайт а затем снова перенаправляет обратно на secsite.com.

<VirtualHost *:80>
        ServerName mainsite.com
        ServerAlias *.mainsite.com secsite.com *.secsite.com

        RewriteRule !https:\/\/mainsite\.com https://mainsite.com%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>

<IfModule mod_ssl.c>
<VirtualHost *:443>
        ServerName mainsite.com
        ServerAlias *.mainsite.com secsite.com *.secsite.com

        RewriteRule !https:\/\/mainsite\.com https://mainsite.com%{REQUEST_URI} [END,NE,R=permanent]

        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/mainsite.com

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        SSLCertificateFile /etc/letsencrypt/live/mainsite.com/fullchain.pem
        SSLCertificateKeyFile /etc/letsencrypt/live/mainsite.com/privkey.pem
        Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>

Есть идеи, как получить эту работу?

1
задан 1 November 2020 в 19:09
1 ответ
 RewriteRule !https://mainsite\.com https://mainsite.com%{REQUEST_URI} [END,NE,R=permanent]

Директива RewriteRuleсоответствует только URL-пути, а не схеме + имени хоста, как вы пытаетесь сделать здесь. Поскольку вы инвертировали шаблон ( префикс ! ), он всегдабудет успешным и приведет к циклу перенаправления. То есть, если он вообще что-то делает...

Вы не включили механизм перезаписи (например, RewriteEngine On), поэтому, если он не был включен ранее в конфигурации, эти Директивы RewriteRuleпросто будут игнорироваться.

Если вы вообще видите какое-либо перенаправление, то либо вы видите кешированный ответ от более ранней попытки (обратите внимание, что перенаправления 301 постоянно кешируются браузером), либо ваше приложение (или что-то еще) запускает перенаправление.

Перенаправление в вашем vHost:80 (HTTP) должно быть безусловнымmod_alias Redirect, так как вы перенаправляете все на HTTPS. Например:

<VirtualHost *:80>
    ServerName mainsite.com
    ServerAlias *.mainsite.com secsite.com *.secsite.com

    Redirect 301 / https://mainsite.com/
</VirtualHost>

Директива Redirectсоответствует префиксу, и все после совпадения копируется в конец целевого URL. например. http://example.com/foo/barперенаправляется на https://mainsite/foo/bar.

Для vHost:443 (HTTPS) необходимо выполнить перенаправление, если запрошенное имя хоста не является каноническим хостом. Для этого вам нужно использовать дополнительную директиву RewriteCondи свериться с серверной переменной HTTP_HOST.Например:

<IfModule mod_ssl.c>
<VirtualHost *:443>
    ServerName mainsite.com
    ServerAlias *.mainsite.com secsite.com *.secsite.com

    RewriteEngine On
    RewriteCond %{HTTP_HOST} !^mainsite\.com$
    RewriteRule ^ https://mainsite.com%{REQUEST_URI} [END,NE,R=permanent]
    :
1
ответ дан 1 November 2020 в 17:15

Теги

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