htaccess mod_rewrite允许ipv6

时间:2014-09-22 08:09:35

标签: .htaccess mod-rewrite syntax ipv6

我想允许两个不同的IP,一个版本4和第二个版本6.对于ipv4,它工作正常,但我不知道允许ipv6的正确语法是什么。 ipv6的示例是2001:718:1001:500:300:7ede:9ac1:8a68

这就是我所拥有的:

RewriteCond %{REMOTE_ADDR} !^213\.168\.132\.69 # works
RewriteCond %{REMOTE_ADDR} !^2001\:718\:1001\:500\:300\:7ede\:9ac1\:8a68 # doesn't works
RewriteCond %{REQUEST_URI} !/maintenance.html$ [NC]
RewriteCond %{REQUEST_URI} !\.(jpe?g?|png|gif) [NC]
RewriteRule .* /maintenance.html [R=302,L]

2 个答案:

答案 0 :(得分:1)

为了能够匹配ipv6地址,你的Apache需要使用以下内容来监听ip6地址:

Listen [2001:db8::a00:20ff:fea7:ccea]:80

<强> Read more about binding IP address in Apache

答案 1 :(得分:1)

您的RewriteCond行必须与mod_rewrite期望的方式完全匹配。 :不需要转义。要做到正确,您可以使用以下内容打开mod_rewrite日志记录:

LogLevel rewrite:trace1

之后,您将在日志文件中看到客户端的IP地址。我出现了:

... mod_rewrite.c(468): [client 2a00:8640:1:0:c0b7:d175:5b0d:66f:51460] ...

最后一位是端口号,所以请关闭它。我在我的mod_rewrite规则中使用2a00:8640:1:0:c0b7:d175:5b0d:66f并且它有效。