2015-05-11 37 views
2

我剛剛在各種網站上安裝了SSL證書。如果我直接轉到https版本的網站,他們工作得很好,但是當我轉到http版本時,我得到:「原因:您正在向啓用SSL的服務器端口說純HTTP。」htaccess重定向不適用於HTTPS - 400錯誤請求Apache 2.4.6

這是應該工作,但不...

RewriteCond %{HTTPS} off 
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 

也不它

!=on =80 !=443, etc. 

任何版本我甚至嘗試把這個在服務器上的文件vhost.conf。

我的開發人員和我都沒有想法,我們很震驚地找不到全能Google幫助我們的任何事情。任何人有任何想法?

回答

0

我正在使用這些重寫規則將我的http請求重定向到帶有SSL證書的我的應用程序上的https。

RewriteEngine Off 
RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=301,L] 
+0

我試過這個只是爲了看,但它不工作。我的Apache配置中一定會有一些事情發生。我在2.4.6上。 – internetjason

0

我認爲你的問題,這非常早,甚至在mod_rewrite的是在請求應用。

您在偵聽端口80上的VirtualHost是https虛擬主機,但瀏覽器正嘗試在端口80上發出純http,但這不起作用。

SSLEngine on 

此指令只能爲您的虛擬主機被激活監聽*:443(或something:443任何變化):

在Apache的SSL與激活。

您應該在端口80上添加一些虛擬主機偵聽,支持可以在該服務器上使用的一羣ServerName和ServerAlias(或者可能是所有名稱,通過確保此虛擬主機是端口80的默認主機名稱),以及唯一的工作就是在端口443上

在這裏你可以使用@Anand銖提供的鏈接來執行這項任務(並且不需要mod_rewrite的)重定向。

但是,所有這些'重定向到https'任務假設您已經有一個工作的虛擬主機,其中https未激活。因爲如果https在任何地方都被激活,你甚至無法開始與服務器進行討論以接收重定向,那麼就沒有「純http」渠道來接收這個響應,甚至無法開始尋求某些東西。

0

好了,萬一別人遇到這個問題,我想現在我終於固定更新。對我們來說,我們在vhost.conf文件中有一些干擾的東西。一旦我將它抹掉並採取了其他一些建議,這是最終在vhost.conf中工作的代碼。 .htaccess文件現在沒有任何內容,因爲它不是必需的。

## -- VIRTUAL HOSTS -- ## 
NameVirtualHost *:80 

<VirtualHost *:80> 
     ServerName dev.example.net 
     Redirect permanent/https://dev.example.net/ 
</VirtualHost> 

<VirtualHost *:443> 
     #-SERVER CONFIG-# 
     ServerAdmin [email protected] 
     ServerName dev.example.net 
     ServerAlias dev.example.net 
     DocumentRoot /var/www/html/example 

     #-SSL-# 
     SSLEngine On 
     SSLProtocol all -SSLv2 
     SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5 
     SSLCertificateFile /etc/httpd/conf/ssl.crt/... 
     SSLCertificateKeyFile /etc/httpd/conf/ssl.key/... 
     SSLCACertificateFile /etc/httpd/conf/ssl.crt/... 
     SSLCertificateChainFile /etc/pki/tls/certs/... 
     SSLCACertificateFile /etc/pki/tls/certs/... 

     #-LOGGING-# 
     ErrorLog /var/www/html/example/error_log 

</VirtualHost>