Подтвердить что ты не робот

Правильное переключение между HTTP и HTTPS с использованием .htaccess

У нас есть сайт для покупок, который мы размещаем на общем хосте (Mediatemple Gridserver). Некоторым частям сайта необходимо использовать HTTPS (checkout и т.д.), А остальное - HTTP.

Кто-нибудь знает, как мы всегда можем принудительно использовать HTTP/HTTPS для определенных URL-адресов? Мы работали в разных состояниях, но мы не можем получить запрос на страницу, которая должна быть на HTTP, но запрашивается с HTTPS для правильного возврата.

Я посмотрел вокруг SO, но не смог найти подходящего ответа на этот вопрос.

4b9b3361

Ответ 1

Я использую что-то похожее на это для папки admin в wordpress:

#redirect all https traffic to http, unless it is pointed at /checkout
RewriteCond %{HTTPS} on
RewriteCond %{REQUEST_URI} !^/checkout/?.*$
RewriteRule ^(.*)$ http://mydomain.com/$1 [R=301,L]

Часть RewriteCond %{HTTPS} on может не работать для всех веб-серверов. Например, для моего веб-хоста требуется RewriteCond %{HTTP:X-Forwarded-SSL} on.

Если вы хотите принудительно сделать обратное, попробуйте:

#redirect all http traffic to https, if it is pointed at /checkout
RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} ^/checkout/?.*$
RewriteRule ^(.*)$ https://mydomain.com/$1 [R=301,L]

Если вам нужны альтернативные способы сделать это, посмотрите askapache.

Ответ 2

Это должно работать практически во всех сценариях и должно работать в вашем реальном vhost или .htaccess:

RewriteEngine on
RewriteCond %{SERVER_PORT} ^80$
RewriteRule ^(.*)$ https://%{SERVER_NAME}/%{REQUEST_URI} [R=301,L]

(не забывайте косую черту перед% {REQUEST_URI}, так как это может привести к тому, что число портов будет опасным)

Ответ 3

RewriteEngine on
RewriteCond %{HTTPS} off [OR] 
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^(.*)$ https://%{SERVER_NAME}/%{REQUEST_URI} [R=301,L]

У меня была проблема с загрузкой. Это как я исправил его.

Ответ 4

Как указано в этом ответе, исправьте приложение, чтобы использовать ссылки https:// при необходимости. Не полагайтесь на автоматическое перенаправление, это может привести к ложному пониманию безопасности, если вы не сделали ваши ссылки/формы, обслуживаемые через https://, перейдите на https:// URL-адреса. Использование mod_rewrite автоматически затрудняет обнаружение таких ошибок (что также может быть уязвимостью).

Ответ 5

Для меня это работало (я использовал его для сайта wordpress и перенаправлял HTTPS). Вы должны добавить условие и строки правил непосредственно за линиями RewriteEngine и RewriteBase:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

# I added these two lines for redirect to HTTPS
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^(.*)$ https://www.yoursite.com/$1 [R=301,L]
# (end of custom modifications)

RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress`

Посмотрите на условие RewriteCond %{HTTP:X-Forwarded-Proto} !https - только это сработало для моего сервера. (Я пробовал RewriteCond %{SERVER_PORT} !^443$ или RewriteCond %{HTTPS} off, но безуспешно.

Ответ 6

Я думаю, что это должно быть:

RewriteCond %{HTTPS}  =on
^/checkout(.*) http://shoppingsite.com/checkout$1 [R]

См. документацию mod_rewrite.