RewriteCond:将HTTP_REFERER与HTTP_HOST匹配的任何解决方法


RewriteCond: any workaround to match the HTTP_REFERER with HTTP_HOST?

1) 我需要验证连接是由我的同一站点还是由其他人引用的。2)我不能简单地手动输入HTTP_HOST,因为.htaccess文件旨在由Subversion处理,并在具有不同HTTP_HOST值的不同开发环境中共享

因此,我们的目标是找到一种解决方法,使这种情况无论环境如何都能透明地工作,并使 htaccess 易于由 svn 处理,而无需手动修复。

谢谢!

使用 Apache 2 你可以这样做:

RewriteCond %{HTTP_REFERER} ^$ [OR]
RewriteCond %{HTTP_REFERER} ^[^:/?#]+://([^/?#]+)  # get authority
RewriteCond %1 ^(?:(?:[A-Za-z0-9-._~!$&'()*+,;=:]|%[0-9A-Fa-f]{2})*@)?((?:[A-Za-z0-9-._~!$&'()*+,;=]|%[0-9A-Fa-f]{2})*)(?::'d+)?$  # get host name
RewriteCond %1/%{HTTP_HOST} !^([^/]+)/'1$  # compare to HTTP_HOST
RewriteRule ^ …

请注意, HTTP/1.1 之前的请求中,HTTP_HOST也可以为空。