Mod rewrite 使用mod_重写强制SSL/HTTPS

Mod rewrite 使用mod_重写强制SSL/HTTPS,mod-rewrite,redirect,ssl,https,Mod Rewrite,Redirect,Ssl,Https,我有一个Zend Framework应用程序,我想使用mod_rewrite将其强制转换为HTTPS。当谈到修改的时候,我很迷茫。这是我应用程序根目录中的当前.htaccess文件 RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-s RewriteCond %{REQUEST_FILENAME} !-

我有一个Zend Framework应用程序,我想使用mod_rewrite将其强制转换为HTTPS。当谈到修改的时候,我很迷茫。这是我应用程序根目录中的当前.htaccess文件

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-s
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule !\.(html|htm|php|js|ico|gif|jpg|png|css|csv)$ /subdir/index.php
基于我所拥有的,强制应用程序使用HTTPS的最佳方式是什么?我已经尝试了在这里找到的几个示例,但在尝试这些示例时,不断出现重定向循环或内部服务器错误


谢谢你的帮助

将此规则置于当前规则之前:


RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^.*$ https://mydomain.com/\0 [L,QSA,R=301]
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

我也在寻找这个解决方案。我添加了秋葵的解决方案,效果非常好。但我的原作不一样。“我的站点/应用程序重写”通过index.php(用于fany URL和../application)重定向所有内容,但您特别请求的文件除外。(就像公共根目录中的图像或其他静态文件)这是我的原件,我很久以前在ZF网站上找到的

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]
下面是Gumbo在整个站点上强制使用SSL的附加规则。到目前为止对我来说效果不错

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]

以下解决方案适用于代理服务器和未代理服务器。因此,如果您正在使用CloudFlare、AWS弹性负载平衡、Heroku、OpenShift或任何其他云/PaaS解决方案,并且您在正常HTTPS重定向中遇到重定向循环,请尝试一下

重新编写引擎打开
#如果我们收到来自代理的转发http请求。。。
RewriteCond%{HTTP:X-Forwarded-Proto}=HTTP[或]
#…或者只是直接从客户端发出的普通旧http请求
RewriteCond%{HTTP:X-Forwarded-Proto}=“”
重写cond%{HTTPS}=在…上
#重定向到https版本
重写规则^https://%{HTTP_HOST}%{REQUEST_URI}[L,R=301]
#把剩下的重写规则放在这里

这里要注意的一点是“将此规则置于当前规则之前”。将此作为第一条规则。我的站点有几个重定向规则,并将此规则作为第一个规则来执行。这个问题与Zend框架无关。当你在谷歌上搜索zend解决方案时,有很多误导。当使用Cloudflare flexible SSL时,此答案应重命名为“另一个mod_重写问题”Definite+1;所有其他解决方案似乎都在wordpress站点上创建重定向循环,其中只有主页强制使用https,而其他页面则允许http。注意:我必须将此代码放在.htaccess中的
#BEGIN WordPress
之前才能使其工作。用于Heroku。酷!我已经找了好几个小时了!非常感谢!:)@你知道为什么正常重定向会导致重定向循环吗?