除了一个类别模式外,强制使用HTTPS

时间:2017-05-31 22:17:57

标签: apache .htaccess mod-rewrite

.htaccess我有这段代码强制所有内容都使用HTTPS:

RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE]

但我想允许来自

的流量
http://www.example.com/video/*

如果需要,保持HTTP并从HTTPS重定向到HTTP。

1 个答案:

答案 0 :(得分:2)

要阻止/video/<whatever>重定向到HTTPS,您可以修改现有的RewriteRule 模式以排除此类网址。例如:

RewriteRule !^video/ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE]

这将匹配以外的任何网址<{1}}。 (/video/前缀否定了正则表达式。)

  

...如果需要,可以从HTTPS重定向到HTTP。

为此,请添加其他规则。例如:

!

RewriteCond %{HTTP:X-Forwarded-Proto} https [OR] RewriteCond %{HTTPS} on RewriteRule ^video/ http://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE] 的检查意味着你在代理服务器后面? (但是检查X-Forwarded-Proto看起来像是一个通用的复制/粘贴解决方案?)如果你不在代理之后,那么应该删除那个条件,因为该标题可能是伪造的。 (?)

请注意,使用302(临时)重定向 test 会很有用,以避免浏览器缓存错误的重定向。 (或者在禁用浏览器缓存的情况下进行测试。)