Apache Виртуальный хост SSL с разными именами доменов - PullRequest
0 голосов
/ 15 января 2020

У меня есть веб-приложение, работающее на VPS, и два доменных имени, скажем, mywebsite.fr и mywebsite.com Все (www.mywebsite.fr // mywebsite.fr // www.mywebsite.com // mywebsite.com) указывают на IP-адрес с сервера, на котором работает Apache (запись A). Для этих доменов был создан сертификат SSL.

Я новичок с Apache. Моя цель - принудительно перенаправить на https://mywebsite.com/requested_route независимо от того, что является начальной точкой входа.

Я не трогал .htaccess. Я попробовал несколько apache conf, и этот близок, чтобы получить ожидаемый результат:

<VirtualHost *:80>
        ServerName  mywebsite.com
        DocumentRoot /var/www/mywebsite/public
        <IfModule mod_rewrite.c>
                Options -MultiViews
                RewriteEngine On
                RewriteCond %{HTTP_HOST} !^mywebsite\.com$ [NC]
                RewriteRule ^ https://mywebsite.com%{REQUEST_URI} [R=301,L]
        </IfModule>
</VirtualHost>

<IfModule mod_ssl.c>
<VirtualHost *:443>
        ServerAdmin myemail@gmail.com
        ServerName  mywebsite.com
        DocumentRoot /var/www/mywebsite/public
        <Directory /var/www/mywebsite/public>
                AllowOverride None
                Order Allow,Deny
                Allow from All

                <IfModule mod_rewrite.c>
                        Options -MultiViews
                        RewriteEngine On
                        RewriteCond %{REQUEST_FILENAME} !-f
                        RewriteRule ^(.*)$ index.php [QSA,L]
                </IfModule>
        </Directory>

        # (Optional) Disable the RewriteEngine for the bundles asset directories
        <Directory /var/www/mywebsite/public/bundles>
                <IfModule mod_rewrite.c>
                        RewriteEngine Off
                </IfModule>
        </Directory>

        ErrorLog /var/log/apache2/mywebsite_error.log
        CustomLog /var/log/apache2/mywebsite_access.log combined
        SSLCertificateFile /etc/letsencrypt/live/mywebsite.com/fullchain.pem
        SSLCertificateKeyFile /etc/letsencrypt/live/mywebsite.com/privkey.pem
        Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>

У меня есть следующие результаты с этим conf: - http://www.mywebsite.com -> https://mywebsbite.com -> ОК - http://www.mywebsite.fr -> https://mywebsbite.com -> ОК - http://mywebsite.com -> https://mywebsbite.com -> ОК - http://mywebsite.fr -> https://mywebsbite.com -> ОК - https://www.mywebsite.com -> https://mywebsbite.com -> ОК - https://www.mywebsite.fr -> https://mywebsite.fr -> НЕ ОК - https://mywebsite.fr -> https://mywebsite.fr -> НЕ ОК - https://mywebsite.com -> https://mywebsite.com -> ОК (ввод = желаемый результат)

Я пытался переписать на 443 для .fr в go в .com, но у меня слишком много ошибок перенаправлений или ssl.

Что я должен изменить, чтобы перенаправить пользователя на https://mywebsite.com/any_route если он приходит из .fr с https?

Спасибо за помощь

1 Ответ

0 голосов
/ 15 января 2020

Если я понимаю, вы хотите перенаправить каждый запрос с других доменов и поддоменов на https://mywebsite.com.

Для этого попробуйте это (Не используйте RewriteEngine On дважды в любом файле apache conf, если вы не отключите его.)

RewriteEngine On
RewriteCond %{HTTP_HOST} ^mywebsite\.com$ [OR] #the backward slash is used to escape the dot
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://mywebsite\.com/$1 [R=301,L]

Для ясности, первое условие перезаписи проверяет, является ли хост mywebsite.com.

второе условие перезаписи проверяет, включен ли HTTPS.

Если какое-либо из условий выполняется, правило перезаписи перенаправляет веб-сайт в домен https://mywebsite.com с URL-адресом, подобным https://mywebsite.com/something.

Общая конф будет такой:

<VirtualHost *:80>
        ServerName  mywebsite.com
        DocumentRoot /var/www/mywebsite/public
        <IfModule mod_rewrite.c>
                Options -MultiViews
                RewriteEngine On
                RewriteCond %{HTTP_HOST} !^mywebsite\.com$ [OR]
                RewriteCond %{HTTPS} !=on
                RewriteRule ^(.*)$ https://mywebsite\.com/$1 [R=301,L]
        </IfModule>
</VirtualHost>

<IfModule mod_ssl.c>
<VirtualHost *:443>
        ServerAdmin myemail@gmail.com
        ServerName  mywebsite.com
        DocumentRoot /var/www/mywebsite/public
        <Directory /var/www/mywebsite/public>
                AllowOverride None
                Order Allow,Deny
                Allow from All

                <IfModule mod_rewrite.c>
                        Options -MultiViews
                        RewriteEngine On
                        RewriteCond %{REQUEST_FILENAME} !-f
                        RewriteRule ^(.*)$ index.php [QSA,L]
                        RewriteCond %{HTTP_HOST} ^mywebsite\.com$ [OR]
                        RewriteCond %{HTTPS} !=on
                        RewriteRule ^(.*)$ https://mywebsite\.com/$1 [R=301,L]
                </IfModule>
        </Directory>

        # (Optional) Disable the RewriteEngine for the bundles asset directories
        <Directory /var/www/mywebsite/public/bundles>
                <IfModule mod_rewrite.c>
                        RewriteEngine Off
                </IfModule>
        </Directory>

        ErrorLog /var/log/apache2/mywebsite_error.log
        CustomLog /var/log/apache2/mywebsite_access.log combined
        SSLCertificateFile /etc/letsencrypt/live/mywebsite.com/fullchain.pem
        SSLCertificateKeyFile /etc/letsencrypt/live/mywebsite.com/privkey.pem
        Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>

(возможно, замените слово «mywebsite» на название вашего сайта)

...