2013-10-15 74 views
6

是否可以使用一个.htaccess文件对不同的IP地址应用不同的重写规则?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地址过滤吗?这甚至可能吗?是否有其他解决方案,以便我可以同时启用两个规则,一个用于我的开发,另一个用于生产?谢谢!

回答

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

+0

恰到好处。还有什么要说的。谢谢! – gradosevic

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] 
+0

这是行不通的,因为第二条规则现在也会触发现有的文件和目录。看看@ JonLin的解决方案。 –