mod_rewrite规则中的@符号是什么意思
What does @ symbol mean in mod_rewrite rules
我正在寻找一种方法来防止我的 PDF 文件在我的网站上被直接 URL 访问,我发现了这些 htaccess 规则:
RewriteEngine On
RewriteCond %{HTTP_HOST}@@%{HTTP_REFERER} !^([^@]*)@@http?:///.*
RewriteRule .*\.pdf [NC,F]
尽管它看起来工作得很好,但我真的不明白这些 @ 符号在 RewriteCond 规则中的含义。我有一些正则表达式的基础知识,但我没有在 apache 和正则表达式文档上找到与这些相关的任何内容,而且我找到规则的文章没有提供任何信息。
有什么想法吗?
简短回答: 它基本上是 HTTP_HOST
和 %{HTTP_REFERER}
值之间的分隔符。在 RewriteCond
指令中执行条件检查时匹配它们的值。
答案解释: 现在我们为什么要将这些 @@
字符作为 2 个 apache 变量之间的分隔符。每当我们想比较 2 个值是 EQUAL 还是 SAME 时,我们都会使用它,因为这有助于我们捕获捕获组中的值,然后如果条件中使用的反向参考值不相同,那么我们的条件将失败。
现在进入当前场景:
假设我们的域名是:www.example.com
HTTP_REFERER
值为:http://www.example.com/en-US/JavaScript
那么%{HTTP_HOST}@@%{HTTP_REFERER}
会做的是:
它将使价值为:
www.example.com@@http://www.example.com/en-US/JavaScript
现在来到Cond线的右边:
!^([^@]*)@@http?:///.*
您会看到捕获组的值为 www.example.com
,当我们在 http?://
中将其用作 </code> 时,它实际上会检查 URL 是否为 <code>http://www.example.com/.*
或不。如果它不等于则继续 URI 的请求。
基本上我们这样做的原因是因为没有直接的方法来检查 URI 中的 2 个值是否相等。
改进规则的建议:
RewriteEngine On
RewriteCond %{HTTP_HOST}@@%{HTTP_REFERER} !^([^@]*)@@http?:///.*
RewriteRule .*\.pdf/?$ - [NC,F]
我正在寻找一种方法来防止我的 PDF 文件在我的网站上被直接 URL 访问,我发现了这些 htaccess 规则:
RewriteEngine On
RewriteCond %{HTTP_HOST}@@%{HTTP_REFERER} !^([^@]*)@@http?:///.*
RewriteRule .*\.pdf [NC,F]
尽管它看起来工作得很好,但我真的不明白这些 @ 符号在 RewriteCond 规则中的含义。我有一些正则表达式的基础知识,但我没有在 apache 和正则表达式文档上找到与这些相关的任何内容,而且我找到规则的文章没有提供任何信息。
有什么想法吗?
简短回答: 它基本上是 HTTP_HOST
和 %{HTTP_REFERER}
值之间的分隔符。在 RewriteCond
指令中执行条件检查时匹配它们的值。
答案解释: 现在我们为什么要将这些 @@
字符作为 2 个 apache 变量之间的分隔符。每当我们想比较 2 个值是 EQUAL 还是 SAME 时,我们都会使用它,因为这有助于我们捕获捕获组中的值,然后如果条件中使用的反向参考值不相同,那么我们的条件将失败。
现在进入当前场景:
假设我们的域名是:www.example.com
HTTP_REFERER
值为:http://www.example.com/en-US/JavaScript
那么%{HTTP_HOST}@@%{HTTP_REFERER}
会做的是:
它将使价值为:
www.example.com@@http://www.example.com/en-US/JavaScript
现在来到Cond线的右边:
!^([^@]*)@@http?:///.*
您会看到捕获组的值为 www.example.com
,当我们在 http?://
中将其用作 </code> 时,它实际上会检查 URL 是否为 <code>http://www.example.com/.*
或不。如果它不等于则继续 URI 的请求。
基本上我们这样做的原因是因为没有直接的方法来检查 URI 中的 2 个值是否相等。
改进规则的建议:
RewriteEngine On
RewriteCond %{HTTP_HOST}@@%{HTTP_REFERER} !^([^@]*)@@http?:///.*
RewriteRule .*\.pdf/?$ - [NC,F]