htaccess阻止在chrome中使用全局SSL重定向



我有一些站点,我正在添加SSL以实现最新的合规性,这些站点有受保护的管理文件夹,全局根重定向
#重定向到SSL站点

RewriteCond %{HTTPS} off
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [NE,L,R=301] 

导致访问者使用一个旧的http:链接到admin来访问404页面,因为重定向发生在早期。

Iv'e通过在全局之前添加停止规则来修复firefox的此问题

# stop processing for admin
RewriteRule ^(admin)($|/) - [L] 

和特定的重定向

RewriteCond %{HTTPS} off
RewriteRule ^admin/(.*)$ https://www.mysite.co.uk/admin/$1?%{QUERY_STRING} [NE,r=301,L] 

然而,在chrome中,目录停止失败,特定的重定向被忽略,因此chrome访问者会得到一个404,而不是被重定向。

我尝试了多次添加到全局,但都不起作用#重定向到ssl站点

RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} !^admin(.*)  [NC]
RewriteCond %{REQUEST_URI} !(.*)admin(.*)  [NC]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/].*)$ https://%{HTTP_HOST}%{REQUEST_URI} [NE,L,R=301]

为什么firefox和chrome的行为不同,我以为是apache在处理,我如何让chrome表现得像firefox?

我怀疑Firefox的行为与Chrome不同。更有可能的是,Chrome中有一个缓存的重定向,导致它直接访问以前的重定向目标,而不访问原始URL。如果使用301重定向而不是302重定向,就会发生这种情况,因为301意味着永久重定向,浏览器会记住这个重定向。

为了解决这个问题,你需要清除浏览器缓存,这样它就不再记得并使用不再有效的重定向。

在发布了这篇文章后,尽管进行了广泛的搜索,但还是出现了另一篇文章,最终的答案解决了这个问题,因此解决方案有两个部分,我在根目录中添加了:

RewriteCond %{HTTPS} ^off$ [NC]
RewriteCond %{REQUEST_URI} /admin/*
RewriteRule ^(.*)$ https://%{SERVER_NAME}/$1 [R,L]

然后在管理文件夹中:

<If "%{HTTPS} == 'on'">
AuthType       Basic
AuthName      "Authorization Required"
AuthUserFile   /var/www/vHost/etc/HTTP-Basic-Auth/htaccess-Users
require       valid-user
</If>
<Else>
ErrorDocument 403 /error/HTTP_FORBIDDEN.html.var
</Else>

然而,我仍然不明白为什么chrome的行为与firefox不同。

最新更新