我已经阅读了很多关于 SO 的一般主题的问题,但似乎无法找到解决我问题的解决方案。
我们正在使用 ExpressionEngine 并且只需要在 https:// 后面有一个部分我们希望网站的其余部分将任何 https:// 请求重定向到 http://。
示例 #1: http: //test.com/facebook 301 重定向到https://test.com/facebook
示例 #2: https: //test.com/test_page/ 301 重定向到http://test.com/test_page/
注意: /facebook 不是服务器上的目录,它是 ExpressionEngine 内部的模板组
到目前为止,这是我的 .htacess:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
# Force SSL on facebook pages
RewriteCond %{HTTPS} !=on
RewriteCond %{REQUEST_URI} ^/facebook
RewriteCond %{HTTP_HOST} ^(www\.)?(.*)$ [NC]
RewriteRule ^(.*)$ https://%2/$1 [R=301,L,QSA]
# Remove SSL on other pages
RewriteCond %{HTTPS} on
RewriteCond %{REQUEST_URI} !^/facebook
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [R=301,L,QSA]
# Remove www. from URLs
RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
# Magic ExpressionEngine rule to remove index.php requirement from URLs
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond $1 !\.(gif|jpe?g|png)$ [NC]
RewriteRule ^(.*)$ index.php/$1 [L]
</IfModule>
当前问题: 示例 #2 工作正常,并且带有 https:// 的 URL 正在删除 https://。
但是如果你去http://test.com/facebook ,它会重定向到http://test.com/ index.php /facebook。即没有HTTPS 和index.php 的添加。
我们认为 .htaccess 文件运行了两次,第一次是命中第一个块并被重定向,但随后它被添加了“index.php”,并命中了第二个块,因此删除了 https:/ /。
任何帮助将不胜感激。
谢谢!
实时 HTTP 标头报告
http://test.com/facebook/register
GET /facebook/register HTTP/1.1
HTTP/1.1 301 Moved Permanently
Date: Thu, 20 Dec 2012 17:20:17 GMT
Server: Apache
Location: https://test.com/facebook/register
--------
http://test.com/index.php/facebook/register
GET /index.php/facebook/register HTTP/1.1
HTTP/1.1 200 OK
Date: Thu, 20 Dec 2012 17:20:17 GMT
Server: Apache