2012-06-05 42 views
0

昨天我問了一個關於這個問題,但我仍然遇到了我的httpd.conf問題。Apache mod_rewrite,強制https,從根文件夾轉發

我想發生是這樣的:

  • 用戶請求http://www.mysite.com/mysite.com,等等然後,他們將被重定向到https://www.mysite.com/shop/

  • 我也想確保在任何請求/shop子目錄也被重寫爲HTTPS,即使用戶鍵入http://www.mysite.com/shop/help/它也會被重寫爲https://www.mysite.com/shop/help/

這是我的配置現在,這是行不通的。

Listen *:443 https 
Listen *:80 http 

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

<VirtualHost *:443> 
    SSLEngine On 
    SSLAppName QIBM_HTTP_SERVER_ZENDSVR 
    SetEnv HTTPS_PORT 443 
    RewriteEngine on 
    RewriteRule ^/$ https://%{HTTP_HOST}/shop/ [NC,R=301] 
</VirtualHost> 
+0

不工作,在沒有任何作品,還是有一些事情,像預期的那樣? – nikoshr

+0

不按預期方式工作。例如,如果我輸入https://www.mysite.com/,它會嘗試加載不存在的index.php,所以我必須使用header命令創建一個重定向到https://www.mysite。 com/shop /我也有問題,有些網站沒有被強制轉換爲HTTPS。如果他們在https://www.mysite.com/shop/或任何子文件夾,並且他們將其更改爲http://www.mysite.com/shop/我希望將其重定向到該網站的HTTPS版本。現在它只會接受它們改變的URL並加載頁面。 – Bead

回答

1

首先,確保mod_rewrite在您的服務器收到請求時啓動。例如,從你的HTTP主機的所有請求重定向到HTTPS服務器

<VirtualHost *:80> 
    RewriteEngine on 
    RewriteRule .* https://%{HTTP_HOST}/shop/ [R,L] 
</VirtualHost> 

然後嘗試

<VirtualHost *:80> 
    RewriteEngine on 
    RewriteRule ^/?shop/(.*) https://%{HTTP_HOST}/shop/$1 [NC,R=301,L] 
    RewriteRule ^/?$ https://%{HTTP_HOST}/shop/ [R=301,L] 

    # other directives 
</VirtualHost> 

<VirtualHost *:443> 
    RewriteEngine on 
    RewriteRule ^/?$ https://%{HTTP_HOST}/shop/ [R=301,L] 

    # other directives 
</VirtualHost> 
+0

所以我可以有兩個規則容器? – Bead

+0

@Bead就我所知,不是如果你是在一個基於IP的託管,如你的配置建議。我的第一個例子是用來取代你當前的''來測試mod_rewrite是否有效。您可以跳過它並直接嘗試第二個代碼塊。 – nikoshr

+0

好吧,我會嘗試這一點,當我能夠重置服務器。謝謝。 – Bead

相關問題