在.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 

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

因为RewriteCondSetEnvIfNoCase指令的第二个参数是正则expression式 (正则expression式),而不是普通的string。 正则expression式使用特殊的语法来定义search模式 。 在正则expression式语法中,点/句点是一个特殊的(元)字符,表示任何字符 (默认情况下除了换行符)。 为了匹配一个字面点(即禁用它的特殊含义),你需要反斜杠转义点(即在点之前加一个反斜杠)。

所以,像spamdomain\.com这样的正则expression式匹配被testing的string中任何地方的文字stringspamdomain.com 。 (在第一个示例中,它与HTTP_REFERER服务器variables中的任何地方spamdomain.com匹配。)而像spamdomain.com (其中点不转义)的正则expression式将匹配spamdomainAcomspamdomainBcom等。因为点匹配任何字符。

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

严格这是不正确的。 正则expression式比预期更匹配。 但是,实际上,如果字面点是唯一可以出现在该位置的字符,这可能不会成为问题。 (但在这种情况下,点应该逃脱。)

参考: