使用动态主机名替换 htaccess 规则中的域名

使用动态主机名替换 htaccess 规则中的域名

我有这条规则.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} !.EXAMPLE.COM.* [OR]
6 RewriteCond %{HTTP_USER_AGENT} ^$
7 RewriteRule (.*) ^http://%{REMOTE_ADDR}/$ [R=301,L]

我想更换示例.COM在第 5 行使用动态主机名。我想对其他域使用相同的规则,而不必修改.htaccess

答案1

RewriteCond %{HTTP_REFERER} !.DOMAIN.COM.* [OR]

复杂性的产生是因为服务器变量的形式%{HTTP_HOST}没有在条件模式(该RewriteCond指令的第二个参数),因为它是一个聚合酶链反应(正则表达式)。

除了上面那行,您还可以执行以下操作:

RewriteCond %{HTTP_HOST}@@%{HTTP_REFERER} !^(.*?)@@https?://\1/ [OR]

这将检查请求的Host标头是否匹配主机名HTTPReferer标头的一部分。

反向\1引用(在 Referer 中)与 Host 匹配。该@@字符串只是任何在其他情况下无法出现的唯一字符串。

请注意,合法用户可能Referer根本不发送 HTTP 标头,在这种情况下,您当前的规则集也将失败

RewriteRule (.*) ^http://%{REMOTE_ADDR}/$ [R=301,L]

请注意代换您的字符串RewriteRule格式不正确。它是一个“普通”字符串,而不是正则表达式。因此,锚点^$将被视为文字字符,应将其删除:

RewriteRule .* http://%{REMOTE_ADDR}/ [R=301,L]

相关内容