2013-07-25 121 views
5

我有一個問題,在Ubuntu Server 12.04上,使用mod_rewrite強制使用Apache 2.2.22將HTTP請求重定向到HTTPS。使用Apache將HTTP重定向到HTTPS

我的/ etc/apache2的/網站可用/默認文件如下:

<VirtualHost *:80> 
     RewriteEngine On 
     RewriteCond %{SERVER_PORT} !^443$ 
     RewriteRule ^/(.*) https://%{HTTP_HOST}/$1 [NC,R,L] 
    </VirtualHost> 

的HTTPS主機在默認的SSL定義在同一個目錄。

訪問服務器的本地IP地址,重定向似乎工作正常。但是,通過FQDN訪問它並不會。使用FQDN,該站點在端口5443上可用,該端口在防火牆中映射到服務器上的443端口,因此可能與該問題有關。我不能直接使用端口443,因爲它由另一臺服務器在此IP地址上使用。

爲了進一步澄清,以下是有效的鏈接:

https://website:5443 
    https://192.168.200.80:443 

重定向在這裏工作:

http://192.168.200.80 

但下面給出一個400錯誤的請求,這是需要重定向哪裏:

http://website:5443/ 

「您的瀏覽器發送了此服務器無法理解的請求。 原因:您正在向使用SSL的服務器端口說純HTTP。 請使用HTTPS方案訪問此URL。「

+0

這似乎是一個很長的路做一個簡單的事情,也許你有這方面的原因,但。在任何情況下,你應該檢查出mod_proxy:http://httpd.apache.org/docs/2.0/mod/mod_proxy.html以及相關的SO問題:http://stackoverflow.com/questions/1162375/apache-port -代理。 –

回答

2

您的問題在這裏是最初的HTTP請求:這將不起作用,因爲服務器不會理解它在端口443上接收請求(作爲響應代碼提示)。

如果沒有端口已定,那麼協議http默認爲80端口,https使用端口443

這也是爲什麼當地的重定向的作品。我敢打賭,如果你訪問過的頁面通過http://website/(有適當的端口轉發端口80),它也可以工作。另外請注意,您的VirtualHost只定義爲端口80,所以它不會對發送到website:5443(或website:443)的請求有效。

通常,您需要一臺服務器在一個端口上接受HTTP和HTTPS請求。不確定任何受歡迎的服務器實際上是否支持這樣的事情,因爲(我認爲)它實質上違反了規範。

+0

因此,基本上,這不能在我的設置中完成? – dutchgold92

+0

不是我所知道的。您可能需要自定義服務器以某種方式接受基於其實際內容的自定義代理重定向請求。 – Mario

+0

嗯,無論如何,在這種情況下並不值得。乾杯。 – dutchgold92

8

這是完全可能的。以下內容將所有http重定向到https網址。

<VirtualHost *:80> 
    ServerName mydomainname.com 
    RewriteEngine On 
    RewriteCond %{HTTPS} off 
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} 
</VirtualHost> 

確保您加載了重寫模塊mod_rewrite並啓用它。

1

如果您想將您的網站從http:// anything.example.com重定向到https://anything.example.com ...只需創建一個專用主​​機.conf文件作爲/ etc/httpd/conf。 d/dedicated.conf和其他conf文件作爲virtual.conf ...的條目爲dedicated.conf如下所示...

這是專用服務器託管配置文件重定向到https ... th[][1]

<virtualhost *:80> 
servername host.example.com 
documentroot /var/www/html 
rewriteengine on 
RewriteRule ^/(.*) https://%{HTTP_HOST}/$1 [NC,R,L] 
sslcertificatefile /etc/pki/tls/certs/name.crt 
sslcertificatekeyfile /etc/pki/tls/private/name.key 
</virtualhost> 
<directory /var/www/html> 
allowoverride all 
require all granted 
</directory> 
+1

不要將代碼作爲圖像發佈。 – Jakuje

+0

會引入安全漏洞嗎? – Anthony

+0

我很確定Apache本身建議使用重定向,而不是現在重寫? – Anthony

0
RewriteEngine On 
RewriteCond %{HTTPS} off 
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L]