htaccess:针对不同IP地址的不同重写规则

时间:2013-10-15 20:38:33

标签: php apache .htaccess mod-rewrite

是否可以仅使用一个.htaccess文件为不同的IP地址应用不同的重写规则?

我有这些规则:

RewriteEngine on
#RewriteCond %{REMOTE_ADDR} !^123\.456\.789\.123
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

#RewriteRule ^(.*)$ /version/1.0/index.php?r=$1 [L]
RewriteRule ^(.*)$ /version/2.0/index.php?r=$1 [L]

最后两条规则都可以正常工作,我可以选择启用哪一条规则。 我想以某种方式为自己启用一条规则来处理开发版本和其他生产规则。

我能以某种方式使用IP地址过滤吗?这甚至可能吗?有没有其他替代解决方案,所以我可以启用两个规则,一个用于我的开发,另一个用于生产?

2 个答案:

答案 0 :(得分:3)

尝试:

RewriteEngine on

RewriteCond %{REMOTE_ADDR} !^123\.456\.789\.123
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /version/1.0/index.php?r=$1 [L]

RewriteCond %{REMOTE_ADDR} ^123\.456\.789\.123
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /version/2.0/index.php?r=$1 [L]

您需要复制重写条件。每组RewriteCond仅适用于RewriteRule 之后的。因此,第一条规则将适用于未通过IP地址访问网络服务器的所有人:123.456.789.123

答案 1 :(得分:0)

您也可以使用:

Options All -Indexes
RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteCond %{REMOTE_ADDR} !^123\.456\.789\.123
RewriteRule ^(.*)$ /version/1.0/index.php?r=$1 [L,QSA]

RewriteCond %{REMOTE_ADDR} ^123\.456\.789\.123
RewriteRule ^(.*)$ /version/2.0/index.php?r=$1 [L,QSA]