我在htaccess
中有此规则:
1 ## Protect from spam bots ##
2 RewriteEngine On
3 RewriteCond %{REQUEST_METHOD} POST
4 RewriteCond %{REQUEST_URI} .wp-comments-post\.php*
5 RewriteCond %{HTTP_REFERER} !.DOMAIN.COM.* [OR]
6 RewriteCond %{HTTP_USER_AGENT} ^$
7 RewriteRule (.*) ^http://%{REMOTE_ADDR}/$ [R=301,L]
我想用动态主机名替换第5行的 DOMAIN.COM 。
我想对其他域使用相同的规则,而不必修改htaccess
。
非常感谢!
答案 0 :(得分:0)
RewriteCond %{HTTP_REFERER} !.DOMAIN.COM.* [OR]
之所以复杂,是因为在{em> CondPattern (%{HTTP_HOST}
指令的第二个参数)中未扩展形式为RewriteCond
的服务器变量,因为它是 PCRE (正则表达式)。
代替上面的行,您可以执行以下操作:
RewriteCond %{HTTP_HOST}@@%{HTTP_REFERER} !^(.*?)@@https?://\1/ [OR]
这将检查请求的Host
标头是否与HTTP Referer
标头的 hostname 部分匹配。
\1
反向引用(在引用者中)与主机匹配。 @@
字符串是任何其他情况下都不会出现的唯一字符串。
请注意,合法用户有可能根本不发送HTTP Referer
标头,在这种情况下,您当前的规则集也会失败。
RewriteRule (.*) ^http://%{REMOTE_ADDR}/$ [R=301,L]
请注意,RewriteRule
中的 substitution 字符串格式错误。它是一个“普通”字符串,而不是正则表达式。因此,锚点^
和$
将被视为文字字符,应将其删除:
RewriteRule .* http://%{REMOTE_ADDR}/ [R=301,L]