TSA*_*TSA 2 rewrite .htaccess apache2
许多网站提供 .htaccess 代码来阻止垃圾邮件机器人、垃圾邮件推荐等。
一些网站在“.”之前使用“\”。在域名中。例如:
RewriteCond %{HTTP_REFERER} spamdomain\.com [NC,OR]
SetEnvIfNoCase Referer spamdomain\.com spambot=yes
Run Code Online (Sandbox Code Playgroud)
但有些网站使用直接域名。例如:
RewriteCond %{HTTP_REFERER} spamdomain.com [NC,OR]
SetEnvIfNoCase Referer spamdomain.com spambot=yes
Run Code Online (Sandbox Code Playgroud)
现在我很困惑哪种代码语法是正确的?两个代码都能正常工作吗?我应该使用哪一种?
因为RewriteCond
和SetEnvIfNoCase
指令的第二个参数是正则表达式(regex),而不是普通字符串。正则表达式使用一种特殊的语法来定义搜索模式。在正则表达式语法中,点/句点是一个特殊的(元)字符,它代表任何字符(默认情况下换行符除外)。为了匹配文字点(即禁用其特殊含义),您需要反斜杠转义点(即在点之前放置反斜杠)。
因此,像这样的正则表达式spamdomain\.com
匹配被测试字符串中spamdomain.com
任何地方的文字字符串。(在第一个例子,它匹配spamdomain.com
的任何地方的HTTP_REFERER
服务器变量。)鉴于像一个正则表达式spamdomain.com
(其中点尚未逸出)将匹配spamdomainAcom
,spamdomainBcom
等等。由于点的任何字符匹配。
Run Code Online (Sandbox Code Playgroud)RewriteCond %{HTTP_REFERER} spamdomain.com [NC,OR]
严格来说这是不正确的。正则表达式的匹配程度超出预期。但是,实际上,如果文字点是唯一可以出现在该位置的字符,则这可能不是问题。(但在这种情况下,点应该被转义。)
参考:
归档时间: |
|
查看次数: |
2060 次 |
最近记录: |