【发布时间】:2016-02-24 01:21:21
【问题描述】:
如何测试请求是否来自 http URL(即使 https 可能已打开)。如果打开了 https,我想提供 https 页面元素。
【问题讨论】:
如何测试请求是否来自 http URL(即使 https 可能已打开)。如果打开了 https,我想提供 https 页面元素。
【问题讨论】:
一种常见的方法是使用 RewriteCond 来检查 HTTPS 环境变量是打开还是关闭(on=https,off=http)。例如,这会检查请求是否通过 http 进来,如果是,则返回 403 Forbidden:
RewriteEngine On
RewriteCond %{HTTPS} !on
RewriteRule .* - [F]
这需要启用重写模块。
已更新(其他示例)
如果页面本身(引用者)在 https 上,则强制所有页面元素为 https:
RewriteCond %{HTTPS} !on
RewriteCond %{HTTP_REFERER} ^https:
RewriteRule ^(.*) https://%{HTTP_HOST}%{REQUEST_URI} [L]
或者,如果您知道需要捕获的只是图像(文件类型),您可以让 RewriteRule 更高效,例如:
RewriteCond %{HTTPS} !on
RewriteCond %{HTTP_REFERER} ^https:
RewriteRule ^.*\.(gif|png|jpe?g)$ https://%{HTTP_HOST}%{REQUEST_URI} [L]
【讨论】: