2016-05-27 5 views
2

У меня есть этот код для принуждая SSL на веб-сайте в целом:Force SSL HTTPS для субдомена с .htaccess

RewriteCond %{HTTPS} !=on 
RewriteRule^https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 

который я получил от here

Я хотел бы, чтобы это применять только к конкретным поддомена.

Например, если вы планировали посетить http://sub.domain.org, он должен перенаправить на https://sub.domain.org.

У меня есть предчувствие, что мне нужно добавить еще один RewriteCond, который в основном говорит является доменом, попадание в http://sub.domain.org, но я в недоумении о том, как писать этот код.

Я смотрел на другие вопросы, такие как StackOverflow:

Force HTTPS and WWW for domain and only HTTPS for subdomains HTACESS

Force SSL/https using .htaccess and mod_rewrite

и Apache Документах https://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewritecond

И я имел эти попытки:

RewriteCond %{HTTPS} !=on 
RewriteCond %{HTTP_HOST} !^(reports\.)?uksacb\.org$ [NC] 
RewriteRule ^.*$ https://%1%{REQUEST_URI} [R,L] 

Сортировка обращенного ответа в этом question/answer:

RewriteCond %{HTTPS} !=on 
RewriteCond %{HTTP_HOST} =reports.uksacb.org 
RewriteRule^https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 

Однако я все еще не в состоянии понять, как сделать это правильно.

Если кто-нибудь может объяснить мне, что я делаю неправильно, что мне нужно сделать, чтобы понять это правильно, и как это сделать, чтобы отладить их условия и правила перезаписи, чтобы убедиться, что он работает правильно. Я был бы очень благодарен , Иногда я думаю, что мой браузер кэширует правила, которые я написал, и мои разные попытки не влияют!

Моя вся .htaccess выглядит следующим образом:

Опции -MultiViews

RewriteEngine On 

# Redirect Trailing Slashes If Not A Folder... 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)/$ /$1 [L,R=301] 

# Force SSL 
RewriteCond %{HTTPS} !=on 
RewriteRule^https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 

# Handle Front Controller... 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule^index.php [L] 

+1

'RewriteCond% {HTTP_HOST} = reports.uksacb.org' должен работать. Очистите кеш браузера и повторите проверку с этим условием во 2-ом правиле – anubhava

+0

@anubhava Право даст этот снимок и посмотрит, как он идет благодаря! – haakym

ответ

1

Для отладки я использую сайт я нашел http://martinmelin.se/rewrite-rule-tester/

Используя правила, предусмотренные

RewriteCond %{HTTPS} !=on 
RewriteRule^https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 

я получил ошибку в

RewriteCond %{HTTPS} !=on 

Это может работать для вас

RewriteCond %{HTTPS} off 
RewriteRule (.*) https://%{SERVER_NAME}/%$1 [R,L] 

Найдено вышеприведенный пример на https://www.sslshopper.com/apache-redirect-http-to-https.html

2

Чтобы избежать использования доменных имен или субдоменов I используется для использования следующего кода:

# Redirect HTTP to HTTPS 
    RewriteCond %{HTTPS} off 
    RewriteCond %{HTTP:X-Forwarded-Proto} !https 
    RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 

Я предпочитаю без WWW.

% {HTTPS} Включить, если запрос подан через SSL.

% {HTTP_HOST} Все между протоколом (http: // или https: //) и запросом (/example-file.txt).

% {REQUEST_URI} Все, после того, как адрес сервера - например, запрос на http://example.com/my/example-file.txt устанавливает это значение в качестве моего/например,-file.txt.

% {HTTP: X-Forwarded-Proto} Протокол, используемый при запросе URL-адреса - установлен на http или https.

Надеюсь, это может быть полезно для всех.

Смежные вопросы