gpt4 book ai didi

.htaccess - 在没有硬编码的情况下检查引用匹配主机?

转载 作者:行者123 更新时间:2023-12-04 14:46:10 24 4
gpt4 key购买 nike

我想做典型的事情,使用 htaccess 确保引用 header 与您的主机匹配。但是,我想在不硬编码域名的情况下执行此操作,因此 htaccess 代码可以轻松地在许多站点上重用。

我知道这是典型的做法。想象一下,我在 WWW.example.com 有一个主服务器,在 IMG.example.com 有一个图像服务器:

RewriteCond %{HTTP_HOST} !^(www\.)
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !https?://(([^\.]+)\.)?example\.com/ [NC]
RewriteRule DO SOMETHING HERE [L]

但是我怎么能在不将“example.com”硬编码到重写条件中的情况下做到这一点?我想以某种方式尝试在引用重写条件中使用 %{HTTP_HOST} ,但我不确定如何只匹配最后一个/域部分并将其引入。也许有某种方法可以匹配主机,将结果放入一个变量中,然后能够在下一个 RewriteCond 行中使用该变量?

我有点失落。谢谢你的帮助!

最佳答案

使用 .htaccess 检查引用

引用检查是一种限制 Web 资源使用方式的机制。具体来说,您可以使用此技术来坚持仅从特定页面或站点查看文件(或者,仅当浏览器说它正在查看您站点上的文件时,无论是真实的还是其他的)。

通常,您会在 htaccess 文件中设置引用检查,如下所示:

RewriteEngine On
RewriteCond %{HTTP_REFERER} !^http://www.example.com/.*
RewriteRule .*\.pdf - [NC,F]

第一行打开重写,第二行检查“REFERER”标题(是的,那样拼写)是否不以“ http://www.example.com/”开头。 ”,第三行将所有以“.pdf”结尾的文件标记为禁止。

这很好,很有用,但它是特定于站点的。您必须更改代码以匹配您的域,有时需要跨多个域应用完全相同的代码。最好检查一下 REFERER 是否 header 包含与 HOST 相同的域名标题。

理想情况下,您可以执行以下操作:

这不起作用
RewriteCond %{HTTP_REFERER} !^http://%{HTTP_HOST}/.*

遗憾的是,您不能在 RewriteCond 中将一个服务器变量与另一个服务器变量进行比较。 .我们可以通过将两个变量放在条件的同一侧,然后将结果与自身进行比较来解决此限制。像这样:

这一个有效 - 随意将其复制到您自己的网站上。
RewriteEngine On
RewriteCond %{HTTP_HOST}@@%{HTTP_REFERER} !^([^@]*)@@https?://\1/.*
RewriteRule .*\.pdf [NC,F]

起初这可能有点令人困惑,所以让我们通过它来推理。在比较的左侧,我们有 %{HTTP_HOST}@@%{HTTP_REFERER} .因此,例如,这将导致这样的字符串: tltech.com@@http://tltech.com/info .在验证规则的右侧,“ ^([^@]*) ”的意思是“记住第一个 @之前的所有内容”标志。然后我们跳过 @@http:// (或可选 @@https:// )。然后确保下一位与我们在开始时记住的主机名匹配。然后我们确保后面跟着 /标志。就是这样。

本质上,此规则会检查 HTTP_REFERER 中的主机名是否存在。字段与 HTTP_HOST 中的主机名完全相同.如果不是这样,那么最后一行告诉 apache 阻止指定的文件类型。

酷,嗯?最好的部分是您可以将代码剪切并粘贴到任何主机中,而无需对其进行任何更改。只需确保最后一行与您要限制的文件类型或名称相匹配,您就成功了。

来源: http://tltech.com/info/referrer-htaccess/

关于.htaccess - 在没有硬编码的情况下检查引用匹配主机?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18797100/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com