2010-06-05 2 views
3

Я пытаюсь поймать любой HTTPS трафик на фронт моего сайта так:.htaccess перенаправления HTTPS на HTTP не работает

https://www.domain.com 

перенаправляется на:

http://www.domain.com 

Однако другие поддомены должны перенаправляться в другое место. По большей части это все работает, кроме https -> http redirection. Вот мой файл .htaccess в данный момент:

RewriteEngine On 

RewriteCond %{HTTPS} on 
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} 

RewriteCond %{HTTP_HOST} ^domain\.com [NC] 
RewriteRule ^(.*)$ http://www.domain.com/$1 [L,R=301] 

RewriteCond "%{HTTP_HOST}" !^www.* [NC] 
RewriteCond "%{HTTP_HOST}" ^([^\.]+).*$ 
RewriteRule ^(.*)$ https://secure.domain.com/a/login/%1 [L,R=301] 

Казалось бы, что этот бит:

RewriteCond %{HTTPS} on 
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} 

не работает, как я бы себе представить. На самом деле это, похоже, не перенаправляет вообще.

В другом подкаталоге у меня наоборот в эффекте, который работает отлично:

RewriteCond %{HTTPS} off 
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} 

так что мое мышление противоположные должны были сделать эту работу, но, казалось бы, нет.

Любые мысли кто-нибудь?

EDIT

Я имею в виду, что это может иметь что-то делать с тем, что на сервере есть сертификат SSL, который провайдер использует для предоставления родового HTTPS адреса вашего сайта. Например, если у вас есть сайт по адресу:

http://www.yourdomain.com

Вы можете получить доступ и тот же контент/хостинг аккаунт через HTTPS с помощью:

https://server100.securedomain.com/yourdomain.com

Может быть, потому что, когда я печатаю https в браузере Я получаю общий сертификат и потому, что он не совпадает с именем домена, которое я ввел, я получаю предупреждение о безопасности с ненадежным сертификатом, который останавливает перенаправление?

EDIT 2

Глядя на сервере заголовков, я думаю, я правильно с моим предположением. Сервер возвращается:

The host name in the certificate is invalid or does not match 

Будет ли это остановить перенаправление?

ответ

4

Только что понял, что я никогда не закрывал это, поэтому в интересах кого-либо еще, кто пытается решить это, я сейчас буду.

Короче говоря, перехват всех https -> http, которые я пытался достичь, не будет работать, потому что сервер обслуживает сначала сертификат, который затем генерирует предупреждение о безопасности. Это происходит до перенаправления по очевидным причинам безопасности, поэтому перенаправление не работает, я хотел.

Надежда, которая помогает кому-то еще.

+0

true ... для тех, у кого есть сервер без сертификата ssl, необходимо принять предупреждение на веб-странице. Тогда следующий код будет перенаправлять с HTTPS на HTTP:
'RewriteCond% {HTTP_HOST} хуг \ .co.uk $ [NC]'
\t 'RewriteCond% {HTTPS} on'
\t' RewriteRule^([^/] +)? $ http: //% {HTTP_HOST}/$ 1 [R = 301, L] '
Invincible

+0

Так что нет способа избежать экрана предупреждения? Невозможно ли заставить HTTP всегда для всех страниц и избегать страницы предупреждения? – Robbiegod

0

Если «это, кажется, не перенаправлять на все» я думаю, что

RewriteCond %{HTTPS} on 

не может по какой-то причине. Я видел это в примере:

RewriteCond %{SERVER_PORT} ^443$ [OR] 
RewriteCond %{HTTPS} =on 

Возможно, вам нужны оба?

+0

Спасибо за ответ, но это тоже не сработает. –

0

Я знаю, что это старая нить, но я только что нашел ответ, и это может помочь кому-то в будущем:

быть уверен, что виртуальные хосты файла на сервере SSL имеет:

AllowOverride All 

это вероятно, в вашем файле виртуального хоста по умолчанию, поэтому вы можете сделать это с http

+0

Это просто позволяет разбор файла '.htaccess'. Он не имеет логики HTTPS/SSL внутри и сам по себе. –

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