在CakePHP中强制使用SSL + WWW .htaccess

问题描述:

我知道“如何强制使用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强制?

感谢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] 

这是应该的:

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] 

最基本的方式就是:

<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