htaccess使用http://或http:// www重写所有内容。到https除了一个或两个URI

时间:2013-08-10 16:27:23

标签: .htaccess http mod-rewrite https

我目前使用的是:

RewriteCond %{HTTPS} !=on
RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]
RewriteCond %{HTTPS} on
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]

我真正想要的是:

RewriteCond %{HTTPS} !=on
RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]
RewriteCond %{HTTPS} on
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [AND]
RewriteCond %{REQUEST_URI} !\/folder/next_folder/(custom_id)
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]

正如您所看到的,我正在尝试在重写为https之前添加额外条件。 对于我使用https的所有页面,但现在firefox有一个更新,并给出了混合内容的问题(当加载使用http://而不是https://的iframe时):

https://blog.mozilla.org/security/2013/05/16/mixed-content-blocking-in-firefox-aurora/

这就是为什么我需要使用https排除几页://注意我删除了www。太

我尝试了不同的东西,但仍然遇到错误,或者它不能像它应该做的那样工作。我很感激帮助。

1 个答案:

答案 0 :(得分:2)

将重写条件移至http:为ON的部分,而不是https:已经开启的部分。

RewriteCond %{HTTPS} !=on
RewriteCond %{REQUEST_URI} !^/folder/next_folder/custom_id
RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]

RewriteCond %{HTTPS} on
RewriteCond %{HTTP_HOST} ^www\.(.*)$
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]