2011-09-01 110 views
4

我知道「如何強制使用HTTPS + WWW」這個主題經常被討論和解決,並且通常它適用於我。在CakePHP中強制使用SSL + WWW .htaccess

但是現在我已經從CakePHP獲得了特定的預定義.htaccess,我不知道如何包含它。

的.htaccess的CakePHP的:

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L] 

如果我把正常的代碼HTTPS/WWW前或向後的代碼強制,它不正確,因爲所有的請求都設置爲根目錄下工作而不是例如/聯繫。

通常情況下,我使用:

RewriteCond %{HTTPS} !on [OR] 
RewriteCond %{HTTP_HOST} !^www\.mydomain\.com$ [NC] 
RewriteRule^https://www.mydomain.com%{REQUEST_URI} [R=301] 

但是你不能只包含上面......

有誰請幫助我包括 HTTPS/WWW在上面的.htaccess強制?

回答

2

感謝LazyOne,這也許工作,但對我來說經常在「mydomain.com/redirect:/app/webroot/index.php」結束了這真的很奇怪。但也許這是由於「{REQUEST_URI}」,因爲我不得不改變我

RewriteRule ^(.*)$ index.php?url=$1 [QSA,L] 

RewriteRule ^(.*)$ index.php [QSA,L] 

由於奇怪的問題與重定向(不知道發生了什麼,CakePHP的突然requestet一個「重定向:控制器」也在這裏描述http://groups.google.com/group/croogo/browse_thread/thread/55539dabfd0191fd?pli=1 - 任何想法?)。

現在工作這個代碼是:

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

RewriteCond %{HTTPS} !on 
RewriteRule (.*) https://www.mydomain.com/$1 [R=301,L] 

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f  
RewriteRule ^(.*)$ index.php [QSA,L] 
1

這是應該的:

RewriteEngine On 

# force https and www. 
RewriteCond %{HTTPS} !on [OR] 
RewriteCond %{HTTP_HOST} !^www\.mydomain\.com$ [NC] 
RewriteRule^https://www.mydomain.com%{REQUEST_URI} [R=301,L] 

# route all requests for non-existing resources to CakePHP 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L] 
4

最基本的方式就是:

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteBase/
    RewriteCond %{HTTPS} !on 
    RewriteRule (.*) https://%{HTTP_HOST}/$1 [R=301,L] 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME} !-f  
    RewriteRule ^(.*)$ index.php [QSA,L] 
</IfModule> 

無需硬編碼的域名。當從http切換到https時,請求也不會重定向到根目錄

+0

這應該是最終接受的答案。硬編碼域名是不好的業務。 – bazzaretta