在CakePHP的.htaccess文件中强制使用SSL和WWW

4

我知道“如何强制使用HTTPS+WWW”这个主题经常被讨论和解决,一般来说对我而言也有效。

但是现在我得到了一个特定的预定义.htaccess文件从CakePHP,我不知道如何包含它。

CakePHP的.htaccess文件:

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

如果我把HTTPS/WWW强制的常规代码放在这段代码的前面或后面,那么它就无法正常工作,因为所有请求都被设置为根目录,而不是例如/contact。
通常我使用的是:
RewriteCond %{HTTPS} !on [OR]
RewriteCond %{HTTP_HOST} !^www\.mydomain\.com$ [NC]
RewriteRule ^ https://www.mydomain.com%{REQUEST_URI} [R=301]

但是你不能仅仅在上面包含...

请问有人可以帮我在上述的.htaccess文件中包含HTTPS/WWW强制吗?

4个回答

7
通用的方法是:
<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时,请求不会重定向到根目录。

1
这应该是最终被接受的答案。硬编码域名是不好的做法。 - bdereta

2

感谢LazyOne,这可能有效,但对我来说,它经常以“mydomain.com/redirect:/app/webroot/index.php”结束,这真的很奇怪。但也许这是由于"{REQUEST_URI}",因为我不得不更改我的。

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

为了

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

由于重定向出现奇怪的问题(不知道发生了什么,CakePHP突然请求一个“Redirect:Controller”,就像这里描述的那样 - 对此有任何想法吗?)。

现在,这段代码可以正常工作

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]

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接