2014-11-03 65 views
0

我用下面的線爲我的虛擬主機配置:的Symfony2 +的Apache2:重寫規則應該涵蓋HTTPS

<VirtualHost *:80> 
    ServerAdmin [email protected] 
    ServerName www.xxx.yy 
    ServerAlias wwww.xxx.yy 

    DirectoryIndex app.php 
    DocumentRoot /var/www/xxx.yy/public_html/web 

    <Directory /var/www/xxx.yy/public_html/web> 
     AllowOverride None 
     RewriteEngine On 
     RewriteCond %{HTTP_HOST} !^www\. 
     RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L] 
     RewriteCond %{REQUEST_FILENAME} !-f 
     RewriteRule ^(.*)$ app.php [QSA,L] 
    </Directory> 

    # Log file locations 
    LogLevel warn 
    ErrorLog /var/www/xxx.yy/log/error.log 
    CustomLog /var/www/xxx.yy/log/access.log combined 
</VirtualHost> 

現在我已經添加了一個SSL證書到我的服務器,當我打電話https://xxx.yy瀏覽器顯示我的網頁/目錄,當我輸入https://xxx.yy/app.php一切都很好。

我該如何實現RewriteRule也適用於https://?

或者,我可以說,我總是希望http://xxx.yy/ *使用http,只是https://xxx.yy/loginhttps://xxx.yy/payment使用https?

感謝您的幫助!

回答

1

您缺少VirtualHost for SSL <VirtualHost *:443>的定義,它必須包含與默認值相同的重寫規則。

爲某些頁面強制使用HTTPS的最佳方式是定義schemes for routes。例如。

secure: 
    path:  /secure 
    defaults: { _controller: AcmeDemoBundle:Main:secure } 
    schemes: [https] 

或通過access_control選項requires_channel

access_control: 
    - { path: ^/secure, roles: ROLE_ADMIN, requires_channel: https } 
+0

哇不錯,謝謝!不知道我必須再次配置相同的重寫規則,但它是有意義的:) – humpdi 2014-11-03 22:48:27