原谅我在这方面缺乏知识。
首先,我们的情况:我们有一个反向代理设置,我们有http://www.xxx.ca/x,有时http://www.xxx.ca/x/y会转发到http://xxx1a.xxx.ca/x或http://xxx1a.xxx.ca/x/y
我们一直在尝试创建一个通用的.htaccess,我们不必专门定义任何子目录。基本上,我们可以在100个网站上使用此.htaccess,而无需逐个站点修改文件。
我们已经让这部分工作了。但是,我们无法强制https。我看到的每个示例都使用HTTP_HOST,它返回代理服务器的值 - 而不是原始请求。
也许我们设置的解决方案完全不同,但我对apache的了解有限。以下是我们目前拥有的内容 - 它解决了通用子文件夹问题,但没有解决HTTPS问题。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{ENV:URI} ^$
RewriteRule ^(.*)$ - [ENV=URI:$1]
RewriteCond %{ENV:BASE} ^$
RewriteCond %{ENV:URI}::%{REQUEST_URI} ^(.*)::(.*?)\1$
RewriteRule ^ - [ENV=BASE:%2]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . %{ENV:BASE}index.php [L,QSA]
</IfModule>
如果有更好的解决方案,我完全愿意改变100%。
答案 0 :(得分:0)
我不确定何时必须将用户重定向到https。无论如何,当您必须切换到https时,您可以只检查SERVER_PORT服务器内部变量,如果不是80则重定向:
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://%{ENV:URI}/$1 [L,R=301]
答案 1 :(得分:-1)
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]