Принудительное использование SSL для трех из шести сайтов, использующих кодовую базу Drupal 8 - PullRequest
2 голосов
/ 24 февраля 2020

В моей папке / sites у меня шесть папок, представляющих шесть разных TLD. Только три из этих TLD (tld1.com, tld2.com, tld3.com) имеют сертификаты SSL. Все шесть используют один файл .htaccess в root. Я знаю, как заставить SSL для одного TLD в .htaccess, но не для трех TLD. (К вашему сведению, у меня база перезаписей / без комментариев в .htaccess.) Буду признателен за любые советы / рекомендации. Спасибо.

1 Ответ

1 голос
/ 24 февраля 2020

Только три из этих TLD (tld1.com, tld2.com, tld3.com) имеют сертификаты SSL.

Это не " TLD s "- это просто домены - все они используют один и тот же TLD!

Я знаю, как принудительно использовать SSL для одного TLD в .htaccess, но не для трех TLD

Процесс почти такой же. Фактически вам может потребоваться изменить существующую директиву, если она указана для вашего сервера c. (Разным серверам могут потребоваться несколько разные методы для перенаправления HTTP на HTTPS, в зависимости от того, как он настроен. Метод, который я использовал ниже, с использованием серверной переменной HTTPS будет наиболее распространенным.)

Вы просто необходимо добавить некоторые условия (директивы RewriteCond) в существующий редирект HTTP / HTTPS, который проверяет запрашиваемое имя хоста.

Например:

RewriteCond %{HTTPS} !on
RewriteCond %(HTTP_HOST} ^(www\.)?example1\.com [NC,OR]
RewriteCond %(HTTP_HOST} ^(www\.)?example2\.com [NC,OR]
RewriteCond %(HTTP_HOST} ^(www\.)?example3\.com [NC]
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

Обратите внимание на отсутствие OR указывать на последнюю директиву RewriteCond.

Вы также можете комбинировать эти условия, поскольку у вас есть только 3 домена, которые нужно проверить, и все они имеют общий ДВУ (ie. * 1028). *).

RewriteCond %{HTTPS} !on
RewriteCond %(HTTP_HOST} ^(www\.)?(example1|example2|example3)\.com [NC]
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

ОБНОВЛЕНИЕ: Я забыл упомянуть, что не хочу / не хочу, чтобы "www" был частью URL. Может ли код, которым вы поделились выше, быть настроен на sh то же самое?

Вы можете реализовать это как два отдельных перенаправления до вышеупомянутого перенаправления HTTP на HTTPS. Один для доменов, которые вы хотите перенаправить на HTTPS, а другой для остальных (которые должны оставаться по HTTP).

Кстати, все эти перенаправления должны быть размещены до любых существующих директив Drupal, которые вы можете have.

Например:

# Remove www subdomain from "secure" domains
# Also redirects to HTTPS
RewriteCond %{HTTP_HOST} ^www\.example1\.com [NC,OR]
RewriteCond %{HTTP_HOST} ^www\.example2\.com [NC,OR]
RewriteCond %{HTTP_HOST} ^www\.example3\.com [NC]
RewriteCond %{HTTP_HOST} ^www\.(.+) [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [R=301,L]

# Remove www subdomain from other (non-secure) domains
RewriteCond %{HTTP_HOST} ^www\.(.+)
RewriteRule ^ http://%1%{REQUEST_URI} [R=301,L]

# HTTP to HTTPS redirect for "secure" (non-www) domains
RewriteCond %{HTTPS} !on
RewriteCond %(HTTP_HOST} ^example1\.com [NC,OR]
RewriteCond %(HTTP_HOST} ^example2\.com [NC,OR]
RewriteCond %(HTTP_HOST} ^example3\.com [NC]
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

Ссылка %1 в первых двух правилах соответствует домену за вычетом www subdomain.

Выше можно уменьшить до что-то вроде следующего, если вы wi sh:

# HTTP to HTTPS and remove www subdomain for secure domains
# Currently assumes all secure domains share the same TLD (ie. ".com")
RewriteCond %{HTTPS} !on [OR]
RewriteCond %{HTTP_HOST} ^www\.
RewriteCond %(HTTP_HOST} ^(?:www\.)?(example1|example2|example3)\.com [NC]
RewriteRule ^ https://%1.com%{REQUEST_URI} [R=301,L]

# Remove www subdomain from other (non-secure) domains
RewriteCond %{HTTP_HOST} ^www\.(.+)
RewriteRule ^ http://%1%{REQUEST_URI} [R=301,L]
...