.htaccess 代码中域名中 DOT 前的 '\' 的使用

.htaccess 代码中域名中 DOT 前的 '\' 的使用

许多网站提供 .htaccess 代码来阻止垃圾邮件机器人、垃圾邮件引荐等。

有些网站在域名的“.”前使用“\”。例如:

RewriteCond %{HTTP_REFERER} spamdomain\.com [NC,OR]

SetEnvIfNoCase Referer spamdomain\.com spambot=yes

但有些网站使用直接域名。例如:

RewriteCond %{HTTP_REFERER} spamdomain.com [NC,OR]

SetEnvIfNoCase Referer spamdomain.com spambot=yes

现在我很困惑哪种代码语法是正确的? 两种代码都能正常工作吗? 我应该使用哪一个?

答案1

RewriteCond因为和指令的第二个参数SetEnvIfNoCase都是常用表达(正则表达式),而不是普通字符串。正则表达式使用特殊语法来定义搜索模式在正则表达式语法中,点/句点是一个特殊(元)字符,代表任意字符(默认情况下,换行符除外)。为了匹配文字点(即禁用其特殊含义),您需要使用反斜杠转义点(即在点前放置反斜杠)。

因此,正则表达式likespamdomain\.com匹配文字字符串spamdomain.com 任何地方在被测试的字符串中。(在第一个例子中,它匹配spamdomain.com 任何地方在服务器变量中。)而像(其中点未被转义)HTTP_REFERER这样的正则表达式将匹配、等。因为点可以匹配任何字符。spamdomain.comspamdomainAcomspamdomainBcom

RewriteCond %{HTTP_REFERER} spamdomain.com [NC,OR]

严格来说,这是不正确的。正则表达式匹配的字符超出了预期。但是,实际上,如果文字点是唯一可能出现在该位置的字符,那么这可能不是问题。(但在这种情况下,应该对点进行转义。)

参考:

相关内容