2013-10-15 104 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的解決方案。 –