拒绝来自除一个域之外的所有域的推荐

时间:2012-03-05 19:21:02

标签: .htaccess mod-rewrite http-referer

是否可以接受来自一个域的流量,理想情况下使用.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错误。

1 个答案:

答案 0 :(得分:2)

这样做:

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

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

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

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