每个Referer的Apache条件标头

时间:2018-02-01 15:30:42

标签: regex apache .htaccess nginx

我在NgINX Server上有这个配置,我需要在运行Apache的另一个Web服务器上使用相同的规则。

NGINX

if ($http_referer !~ "^https?:\/\/.*\.sitea\.com.*|https?:\/\/.*?\.siteb\.com.*|https?:\/\/sub\.sitea\.com.*|?$") {
 add_header X-Frame-Options "DENY";
}

我尝试使用以下代码,但收到内部服务器错误

的Apache

<IfModule mod_headers.c>
  <If "%{HTTP_REFERER} !~ m#^https?:\/\/.*\.sitea\.com.*$#">
    Header append X-Frame-Options "DENY"
  </If>
</IfModule>

你能帮助找到正确的方法吗?

2 个答案:

答案 0 :(得分:1)

我发现这个解决方案适用于旧的Apache版本。

RewriteEngine On
RewriteCond %{HTTP_REFERER} !^https?:\/\/.*\.sitea\.com.*?$ [NC]
RewriteRule ^ - [E=NOFRAME:1]
Header append X-Frame-Options "DENY" env=NOFRAME

通过这种方式,我可以根据授权域列表有条件地放置X-Frame-Options。 这是不使用内容安全策略规则的旧浏览器的故障回复。 You can see here the full list

Header append Content-Security-Policy "frame-ancestors sitea.com"

所以现代浏览器将使用CSP2规则,旧版使用X-Frame-Options。感谢正则表达式,我们可以将此选项应用于允许的域列表。

答案 1 :(得分:0)

Apache 2.4附带了

Expressions。你的肯定比那个年长。