如何使用.htaccess限制来自外部服务器的脚本访问

时间:2018-02-24 13:12:42

标签: apache .htaccess access

我正在努力实现这个目标: 我的主域example.com/scripts中有一个目录/文件夹。 名为script的文件夹只能由example.com子域的网站访问,这意味着来自以下任何网站:

admin.example.com,
people.example.com,
etc.example.com,
example.com

他们的页面应该能够调用脚本或/ scripts目录中的任何内容,例如

<script src="https://example.com/scripts/js/demo.js" charset="utf-8"></script>

<link rel="stylesheet" href="https://example.com/scripts/css/demo.css">

如果例如来自anotherdomain.com的页面尝试访问/ scripts目录,则服务器将以404响应。

请帮忙! 感谢。

1 个答案:

答案 0 :(得分:0)

你遵循完全错误的方法。不要先发布一些东西,然后再试着阻止它。你永远无法真正确保这一点。而是在这些“子域主机”中使用路由端点,从而能够将对该文件夹的访问限制为单个IP地址,即您自己的系统。因此,从客户端的角度来看,浏览器从网站自己的“子域”请求脚本,而子域又在内部将请求重新路由到该文件夹​​/主机/等等。

有很多解决方案。在互联网上可以找到关于如何做到这一点的任何解释。

根据您的描述,您的设置非常简单,因此在此类路由逻辑中不需要任何特殊逻辑。相反,您需要一个简单的静态映射。最简单的方法是在http服务器本身的层面上做到这一点。如果您已加载代理模块,那么您可以执行类似的操作来实现简单的转发代理:

ProxyPass /scripts/ http://example.com/scripts/

如果不仅是http://example.com/scripts/提供的脚本,而且还有阻止引用的东西,那么您需要设置反向代理:

ProxyPass /scripts/ http://example.com/scripts/
ProxyPassReverse /scripts/ http://example.com/scripts/

最好是将这些定义放在“子域”的http服务器配置中。您也可以将动态配置文件用于此类内容,但这有许多缺点。

如上所述还有其他解决方案。例如,您可以实现一个简单的路由器脚本,允许进行微调授权管理等。但你显然不需要那样做。

所有这一切的主要目标是:

  • 不要直接从http://example.com发布任何,因此阻止访问除了子域http服务器。
  • 所有客户端请求从您的“网页”指向他们所服务的http主机,因此子域名为http hosts。

apache http服务器的官方文档包含您需要的所有信息。它质量很好,并附有很好的例子。