通过htaccess无法正常强制选择页面上的安全服务器

时间:2011-12-07 21:54:45

标签: .htaccess mod-rewrite https

我使用mod_rewrite强制两个页面使用HTTPS,而所有其他页面应保持HTTP。目前,我可以在我需要的页面上成功强制使用HTTPS - 但是,当我尝试将所有其他页面更改为HTTP时,我的HTTPS页面变得不安全。我猜这是因为规则正在改变HTTPS页面由于某种原因加载的资产的URL。

有什么想法吗?这是我正在使用的.htaccess文件。 (请注意,我的主机上需要ENV:HTTPS方法)

# FORCE HTTPS (WORKS JUST FINE)
RewriteCond %{ENV:HTTPS} !on [NC]
RewriteCond %{REQUEST_URI} ^(/index\.php|)/(donate|achdebit)/?$
RewriteRule ^(.*)$ https://www.site.org/$1 [R,NC,L]

# FORCE HTTP (IF ADDED, BREAKS THE SITE)
RewriteCond %{ENV:HTTPS} on [NC]
RewriteCond %{REQUEST_URI} !^(/index\.php|)/(donate|achdebit)/?$
RewriteRule ^(.*)$ http://www.site.org/$1 [R,NC,L]

1 个答案:

答案 0 :(得分:0)

当你猜测第二条规则会强制安全页面请求重定向到http的资产(css / js等)时,我相信你是对的。为防止这种情况,请添加以下内容

# FORCE HTTP (IF ADDED, BREAKS THE SITE)
RewriteCond %{ENV:HTTPS} on [NC]
RewriteCond %{REQUEST_URI} !^(/index\.php|)/(donate|achdebit)/?$
#NEW# only redirect requests that are not for existing files
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ http://www.site.org/$1 [R,NC,L]
通过将#new替换为

或明确排除资产

#only redirect requests that are not for existing files
RewriteCond %{REQUEST_URI} !\.(css|js|png|gif|etc) [NC]