2013-05-06 2 views
2

나는 몇 시간 동안 고생하고있다. 나는 이것이 내가 원하는 방식으로 작동하도록 할 수는 없다. 간단히 말해서, 아래 URL의 IP 주소 나 URL에 "/ unsubscribe /"가있는 요청을 제외한 모든 URL 요청을 www.test.com.au로 리디렉션하고 싶습니다.htaccess 재 작성 배제가 작동하지 않음

IP 주소 제외가 완벽하게 작동합니다. 그러나 예를 들어 www.test.com.au/flashsale/newsletter/subscriber/unsubscribe/id/8255/code/7iji5wv5hs8e3klvwwltlqy2bjmpmg5f/에 도달하려고하면/everytime으로 리디렉션되고 싶지 않습니다. 여기

는 어디에서 잘못 가고 내 깨진 재 작성 규칙

RewriteCond %{REMOTE_ADDR} !^110\.174\.129\.147 
RewriteCond %{REMOTE_ADDR} !^203\.217\.17\.162 
RewriteCond %{REMOTE_ADDR} !^111\.67\.4\.233 
RewriteCond %{REQUEST_URI} !/unsubscribe/ [NC] 
RewriteCond %{REQUEST_URI} !^/$ [NC] 
RewriteCond %{REQUEST_URI} !\.(jpe?g?|png|gif) [NC] 
RewriteRule .*/[R=301,L] 

입니까?

추신 : 이것은 나를 죽이고 있습니다.

+0

실제로 이상한. 전체 URI를 사용하여 귀하의 상태에서'id'까지 시도해 보셨습니까? 또는 URI 전체에 필요한 와일드 카드를 사용합니까? –

+0

다음과 같이 행을 수정했습니다 : '! ^/flashsale/newsletter/subscriber/unsubscribe (.) * [NC]'[email protected] –

+0

이 규칙은 완전히 URL 히트를 제거 할 때처럼 모든 문제를 일으키고 있다는 것을 매우 긍정적으로 생각합니다. –

답변

2

파일은 다음과 같아야합니다

RewriteCond %{REQUEST_URI} !/flashsale/newsletter/subscriber/unsubscribe/id/[\d]+/code/[a-z\d]+/? [NC] 
RewriteCond %{REMOTE_ADDR} !^110\.174\.129\.147 [OR] 
RewriteCond %{REMOTE_ADDR} !^203\.217\.17\.162 [OR] 
RewriteCond %{REMOTE_ADDR} !^111\.67\.4\.233 [OR] 
RewriteCond %{REQUEST_URI} !\.(jpe?g?|png|gif)$ [NC] 
RewriteRule ^/[R=301,L] 

설명 :

  1. 첫 번째 변화는 OR 플래그를 추가합니다. 원래 코드에이 코드가 없습니다. mod_rewrite은 자동으로 AND 플래그를 취합니다. 이는 코드가 모든 IP 주소를 확인하고 있음을 의미합니다.

  2. 두 번째 변경 사항은 검사 할 전체 REQUEST_URI을 필수 와일드 카드로 지정하는 것과 관련이 있습니다. 첫 번째 와일드 카드 (\d)는 자릿수를 확인하고 두 번째 자릿수 (a-z\d)는 'a'에서 'z'까지의 자릿수와 문자를 모두 확인합니다.

편집은 :

나는 이제 편집을 만들었습니다. unsubscribe 부분을 맨 위로 옮겼습니다. 이렇게하면 요청이 지정된 문자열과 일치하지 않으며 나열된 IP 주소 중 ANY가 요청에 액세스하는 데 사용되고 있지 않은지 확인합니다.

(나는 순간에 테스트 환경에서 아니라고 있습니다. 내 수정이 작동하지 않을 수 있습니다.)

+0

빠른 응답 마이크 덕분에 위의 코드는 여전히 나를 위해 작동하지 않습니다. 규칙은 여전히'/'로 리다이렉트하고있다. 나는 여전히 매우 새로운 .htaccess와 regex입니다. 정확히 무엇을 수정 하시겠습니까? –

+0

내 대답을 편집하여 변경 사항을 설명합니다. –

+0

내 설명 및 수정 된 코드를 참조하십시오. –

0

지우기 브라우저 캐시 및 브라우저를 다시 시작합니다. 그런 다음 코드를 사용하여 코드를 교체해보십시오 : 당신이 그것을 잘 작동하는지 확인되면, R=301R=302을 대체

Options +FollowSymLinks -MultiViews 
# Turn mod_rewrite on 
RewriteEngine On 
RewriteBase/

RewriteCond %{REMOTE_ADDR} !^(110\.174\.129\.147|203\.217\.17\.162|111\.67\.4\.233) 
RewriteCond %{REQUEST_URI} !/unsubscribe/ [NC] 
RewriteCond %{REQUEST_URI} !\.(jpe?g|png|gif)$ [NC] 
RewriteRule ^.+$/[R=302,L] 

. mod_rewrite 규칙을 테스트하는 동안 R=301 (영구 리디렉션)을 사용하지 마십시오.

+0

죄송합니다. IP 예외가 발생합니다. 그 이유는 무엇입니까? –

+0

이상하게도 IP가이 규칙을 위반 했습니까? – anubhava

+0

목록에있는 IP로가는 요청과 탈퇴 문자열이있는 URI를 제외하고 사이트에 액세스 할 수 없습니다. 프록시를 통해 사이트를 테스트했을 때로드되었습니다. 즉, 요청이'/'로 리다이렉트되지 않았 음을 의미합니다. –