2016-08-24 122 views
0

我的.htaccess文件有3條重寫規則,但我面臨的一個問題重定向:太多的重定向錯誤

RewriteEngine On 

RewriteBase/

RewriteCond %{HTTP_HOST} !^www\. 
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L] 

RewriteCond %{REMOTE_ADDR} =IP TO BLOCK GOES HERE 
RewriteCond %{REMOTE_ADDR} =ANOTHER IP TO BLOCK GOES HERE 
RewriteCond %{REQUEST_URI} !^/blocked 
RewriteRule ^(.*)$ http://www.myhost.com/blocked [R=307,L] 

RewriteCond %{REMOTE_ADDR} !=AUTHORIZED IP HERE 
RewriteCond %{REQUEST_URI} !^/maintenance 
RewriteRule ^(.*)$ http://www.myhost.com/maintenance [R=307,L] 

ErrorDocument 400 /400.php 
ErrorDocument 401 /401.php 
ErrorDocument 403 /403.php 
ErrorDocument 404 /404.php 
ErrorDocument 500 /500.php 

的問題是,如果被阻止的IP嘗試做訪問該網站時,它正在維護中,我收到「錯誤的重定向」錯誤。如果IP是拒絕的ips之一,如何停止重寫處理?

回答

1

您可以使用:

RewriteEngine On 

RewriteBase/

RewriteCond %{REMOTE_ADDR} =IP TO BLOCK GOES HERE 
RewriteCond %{REMOTE_ADDR} =ANOTHER IP TO BLOCK GOES HERE 
RewriteCond %{REQUEST_URI} !^/blocked 
RewriteRule^http://www.myhost.com/blocked [R=307,L] 

RewriteCond %{REMOTE_ADDR} !=AUTHORIZED IP HERE 
RewriteCond %{REQUEST_URI} !^/(?:maintenance|blocked) 
RewriteRule^http://www.myhost.com/maintenance [R=307,L] 

RewriteCond %{HTTP_HOST} !^www\. 
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L] 

ErrorDocument 400 /400.php 
ErrorDocument 401 /401.php 
ErrorDocument 403 /403.php 
ErrorDocument 404 /404.php 
ErrorDocument 500 /500.php 
+0

謝謝您的回答,這個工作,但在第一種情況下,規則以阻止IPS,htaccess的只得到了第一個,其它的被忽略,除非我用[OR]運營商。沒有使用[OR]的方法嗎?只是爲了更直接。爲什麼維護規則在沒有添加[OR]的情況下工作,但阻止的規則不是? – Hypister

+1

所有測試均使用「和」。在這種情況下,您需要在多個'RewriteCond'測試中添加'[OR]'。在一次測試中可以添加多個IP:'RewriteCond%{REMOTE_ADDR} ^(111 \ .111 \ .111 \ .111 | 222 \ .22 \ .2 \ .22 | 3 \ .333 \ .33 \ .3 | xxx \ .xx \ .xxx \ .xx)$' – Croises

+1

沒有'[OR]'的維護工作,因爲這是一個負面測試(使用'!')在這種情況下,您不能使用[或]。 – Croises