2012-10-15 4 views
0

희망 사항을 충분히 설명 할 수 있기를 바랍니다.1 개 경로와 2 개 IP를 제외한 Apache RewriteRule 리디렉션

다른 서버의 동일한 페이지로 사용자를 리디렉션하기 위해 사용하고있는 Apache 사이트의 일부 RewriteRules가 있습니다. 두 가지 예외가 있습니다 - 원본 서버에 액세스하기 위해 2 개의 IP 주소를 통과시켜야하며 규칙이 특정 경로에 적용되는 것을 원하지 않습니다.

RewriteCond %{REMOTE_HOST} !^10\.10\.10\.1(0|1)$ 
RewriteRule ^page/old/url/1$ http://www.site.com/new/url/1 [R=301,L] 

# If the user is trying to get to /admin, let it past by skipping the next rewriterule 
RewriteCond %{REQUEST_URI} ^/admin(|.*)$ 
RewriteRule ^.*$ - [S=1] 

# Catch-all to send any "un-mapped" pages to the homepage 
RewriteCond %{REMOTE_HOST} !^10\.10\.10\.1(0|1)$ 
RewriteRule^http://www.site.com/homepage [R=301,L] 

# Other rules follow, but no redirections 

그래서, 나는 htaccess로 새 사이트 위치에이 개 IP 주소를 제외한 모든 사용자를 리디렉션 할 : 여기 내 현재의 룰이다. 그래도 보장하고 싶다면 사람/admin에 액세스 할 수 있습니다. 그런 다음 구체적으로 리디렉션되지 않은 모든 페이지를 선택하는 포괄적 인 규칙이 있습니다.

REQUEST_URI 행이 일치하지 않거나 건너 뛰기 규칙이 작동하지 않는 것으로 보입니다. 내가 누락 된 명백한 것이 있습니까?

답변

2

처음에는 다시 쓰지 않으려는 조건을 잡는 것이 더 간단 해 보입니다. 다른 규칙에서는 걱정할 필요가 없습니다. 이 같은

뭔가 :

#Don't rewrite known IPs or path /admin 
RewriteCond %{REMOTE_HOST} ^10\.10\.10\.1(0|1)$ [OR] 
RewriteCond %{REQUEST_URI} ^/admin($|\/|\/.*) 
RewriteRule ^.*$ - [NC,L] 

# Redirection rules 
RewriteRule ^page/old/url/1/?$ http://www.site.com/new/url/1 [R=301,NC,L] 
RewriteRule ^page/old/url/2/?$ http://www.site.com/new/url/2 [R=301,NC,L] 
# Catch all 
RewriteRule ^(.*)$ http://www.site.com/$1 [R=301,L]