@symbol在mod_rewrite规则中是什么意思



我一直在寻找一种方法来防止我的PDF文件从我网站上的直接URL访问,我发现了以下htaccess规则:

RewriteEngine On
RewriteCond %{HTTP_HOST}@@%{HTTP_REFERER} !^([^@]*)@@http?://1/.*
RewriteRule .*.pdf [NC,F]

尽管它看起来很完美,但我真的不明白这些@符号在RewriteCond规则中的含义。我有一些关于regex的基础知识,但在apache和regex文档中没有发现任何与之相关的内容,我发现规则的文章也没有提供任何信息。

有什么想法吗?

简短回答: 它基本上是HTTP_HOST%{HTTP_REFERER}值之间的隔离符。在RewriteCond指令中执行条件检查时匹配它们的值。

解释答案: 现在我们为什么将这些@@字符作为2个apache变量之间的隔离符。只要我们想比较两个值是否相等或相同,就可以使用它,因为这有助于我们在捕获组中捕获值,然后如果条件中使用的反向参考值不相同,那么我们的条件就会失败。

现在来看当前的场景:

假设我们的域名是:www.example.comCCD_ 6值为:CCD_ 7

那么%{HTTP_HOST}@@%{HTTP_REFERER}要做的是:其价值为:www.example.com@@http://www.example.com/en-US/JavaScript

现在到康德线右侧:!^([^@]*)@@http?://1/.*

您可以看到捕获组的值为www.example.com,当我们在http?://1中将其用作1时,它实际上会检查URL是否为http://www.example.com/.*。如果它不等于,那么继续请求URI。

我们之所以这么做,基本上是因为没有直接的方法来检查URI中的两个值是否相等。

关于改进规则的建议:

RewriteEngine On
RewriteCond %{HTTP_HOST}@@%{HTTP_REFERER} !^([^@]*)@@http?://1/.*
RewriteRule .*.pdf/?$ - [NC,F]

最新更新