【问题标题】:Deny referrals from all domains except one拒绝来自除一个以外的所有域的推荐
【发布时间】:2012-03-23 06:38:08
【问题描述】:

是否可以只接受来自一个域的流量,最好使用 .htaccess 文件? 我希望我的网站只能通过我拥有的另一个网站上的链接访问。

我知道如何阻止一个引用域,但不是所有域

RewriteEngine on
# Options +FollowSymlinks
RewriteCond %{HTTP_REFERER} otherdomain\.com [NC]
RewriteRule .* - [F]

这是我完全重写的代码:

RewriteEngine On

RewriteBase /

RewriteCond %{HTTP_REFERER} .
RewriteCond %{HTTP_REFERER} !domain\.co.uk [NC]
RewriteRule .? - [F]

# The Friendly URLs part
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

我认为它可以正常工作,但没有加载任何资产,当我单击另一个链接时出现 500 错误。

【问题讨论】:

  • 我假设`存在复制粘贴错误?

标签: .htaccess mod-rewrite http-referer


【解决方案1】:

制作如下:

RewriteCond %{HTTP_REFERER} .
RewriteCond %{HTTP_REFERER} !yourdomain\.com [NC]
RewriteCond %{HTTP_REFERER} !alloweddomain\.com [NC]
RewriteRule .? - [F]

第一个RewriteCond 检查引荐来源网址是否为空。第二个检查它不包含字符串yourdomain.com,第三个检查它不包含字符串alloweddomain.com。如果所有这些检查都通过,RewriteRule 将触发并拒绝请求。

(允许空引用者通常是个好主意,因为浏览器可以出于各种原因生成它们,例如:

  • 用户已将链接添加为书签,
  • 用户在地址栏中手动输入了链接,
  • 用户重新加载了页面,
  • 浏览器配置为不发送跨站引荐来源信息,或
  • 您的网站和浏览器之间的代理会去除引荐来源网址信息。)

【讨论】:

  • 非常感谢您的快速回复,由于某种原因,我收到 500 错误。
  • 然后检查服务器日志以查看导致 500 错误的原因。
  • 所以它确实可以工作,但是页面加载时没有我的 css 和图像
  • 好的,很明显的问题:您记得允许来自您的自己的域的引荐来源,对吧?
  • 对不起,那太愚蠢了!现在工作得很好,非常感谢。
猜你喜欢
  • 1970-01-01
  • 2013-01-26
  • 2018-10-09
  • 1970-01-01
  • 2020-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-08
相关资源
最近更新 更多