mod_rewrite - 获取域和tld

时间:2014-11-17 12:17:11

标签: regex apache mod-rewrite

我想允许使用RewriteMap基于白名单的引荐来源。因为我只需要whitelist.map中的域和tld,我想从%{HTTP_REFERER}中提取这些部分并对其进行测试。

说明一下:

推荐人可以是:

http://www.example.com/somepage.html

我想测试

example.com

到目前为止,我得到了以下代码,我认为正则表达式部分运行不正常:

RewriteMap whitelist txt:whitelist.map

RewriteCond %{HTTP_REFERER} !=""
RewriteCond %{HTTP_REFERER} ([^.]+)\.([^.]+)\.([^.]+)\/$
RewriteCond ${whitelist:%2.%3|NOT-FOUND} =NOT-FOUND
RewriteRule ^.* http://www.somewhere-else.com/ [R,L]

使用whitelist.map

## whitelist.map
## List of allowed referrers

example.com yes

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

您可以用这个替换当前代码

RewriteMap whitelist txt:whitelist.map

RewriteEngine On

RewriteCond %{HTTP_REFERER} ^http://(?:.*?)([^.]+\.[^./]+)/ [NC]
RewriteCond ${whitelist:%1|NOTFOUND} NOTFOUND
RewriteRule ^ http://www.somewhere-else.com [R,L]

注意:此代码假定列入白名单的域是第一级域(例如,不像.co.uk