2016-08-07 2 views
1

В моем файле .htaccess, я создал следующие правила, чтобы убедиться, что он всегда HTTPS:Можно ли предположить, что не-https?

# Redirect To HTTPS... 
RewriteCond %{SERVER_PORT} !=443 
RewriteRule^https://%{SERVER_NAME}%{REQUEST_URI} [L,R=301] 

Безопасно предположить, что каждый порт кроме 443 должен быть перенаправлен на HTTPS? Следует ли разрешать другим портам в определенных случаях? Я хочу, чтобы мой сайт никогда не работал незашифрованным.

ответ

2

Добавьте правило ниже в ваш .htaccess, он сделает силу https независимой от порта и перенаправляет весь трафик http на https.

Options +FollowSymLinks -MultiViews 
# Turn mod_rewrite on 
RewriteEngine On 

RewriteCond %{HTTPS} off 
RewriteRule^https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] 
+0

Было бы лучше пример, если вы объяснили, почему - что фильтрация на основе выбора порта бесполезно, но вместо этого фильтруйте по используемому протоколу. Но тем не менее это хорошее решение. –

+0

Хорошая вещь с этим HTTPS! Но использование HTTP_HOST - плохая идея, это значение использует заголовок 'host', отправленный клиентом, - не используйте его! –

+0

И еще одна вещь - лучше делать '= off' вместо' off'. Это то, что люди часто забывают - без '=' это регулярное выражение! Это дает небольшое снижение производительности, но это не так важно.Хуже того, он также будет соответствовать «офсайду», «ripoff» и т. Д. Что-то вспомнить, если мы будем использовать такие значения, где есть больше вариантов, чем просто и выключено. –

1

порт 80 и 443 порты по умолчанию для HTTP/HTTPS в соответствии с RFC documentaion http://www.rfc-editor.org/rfc/rfc2616.txt. Поэтому браузеры автоматически будут использовать эти порты для подключения этих протоколов. Номера портов должны быть предоставлены браузеру, если не 80/443.

Поэтому, если у вас нет причин для обслуживания из нестандартных портов, вы можете перенаправить с порта 80 на 443. Вам нужно знать, как использовать перехват всех переадресаций на 443, если вы начнете использовать другой порт для HTTP-соединений или одинаково используя перенаправление порта 80, а затем добавление большего количества портов для обслуживания не будет перенаправляться.

Существует много способов написания перенаправления на основе того, что подходит вашему требованию.

Пример порта 80 перенаправления:

RewriteEngine On 
RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L] 
+0

Снова. 'RewriteCond% {SERVER_PORT} 80' не порт 80. Это порт, который СОДЕРЖИТ« 80 »в своем номере. Это то, что вы имели в виду? Наверное, нет. –

+1

Плюс, почему вы ловите регулярное выражение из uri, если оно вам не нужно? Вместо этого используйте {REQUEST_URI}. –

+1

И последнее - вы, вероятно, хотите перенаправить навсегда, а не временно. Используйте R = 301. –

1

, если явно не прошу, браузеры будут подключаться только к порту 80 (или 443, если HTTPS указано). Ваш веб-сервер должен быть прослушивание только к порту 80 и 443, так что у вас есть только переадресовать порт 80.

Если вы хотите всегда служить протокол HTTPS, то вы должны добавить HSTS и преднагрузки вашего сайта:

https://developer.mozilla.org/en-US/docs/Web/Security/HTTP_strict_transport_security

https://hstspreload.appspot.com/

HSTS является заголовок, который расскажет браузер для подключения только к протоколу HTTPS, никогда HTTP, но он работает только после первого успешного соединения (поэтому первое соединение может быть небезопасно). Если вы предварительно загрузите его, браузеры знают, что ваш сайт использует https только до первых посещений, поэтому он также может его защитить.

1

Если у вас есть контроль над конфигурацией Apache и уход за производительностью, тогда нет необходимости использовать .htaccess и mod_rewrite. Это позволит избежать загрузки и разбора .htaccess для каждого веб-запроса.

Просто используйте эту простую Redirect директиву в виртуальной конфигурации хоста:

<VirtualHost *:80> 
    ServerName www.example.com 
    Redirect "/" "https://www.example.com/" 
</VirtualHost> 

Подробнее о: when not to use mod_rewrite

+1

Да, я тоже нашел его. Вероятно, я попытаюсь отразить мои правила .htaccess в конфигурации сервера. –

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