2010-11-29 3 views
9

...(301) 나는 이런 식으로 뭔가를 사용했다

RewriteRule here/(.*) http://www.there.com/$1 [R=301,L] 

하지만 그래서

내가 이것을 사용 일 수 없었다 ...

redirect 301 /here http://www.there.com 

그리고 제대로 작동했습니다.

다른 사람이 설명 할 수 있습니까? 둘 다 필요합니까?

또한 어떻게 리디렉션 경로를 제외합니까? (301)의 모든 리디렉션

처럼 ... ...

redirect 301 /here http://www.there.com 

하지만

/here/stayhere.html 

감사

+0

당신이 정규식과 아무 상관이 있는지 위치 : 구성에 RewriteEngine on을 추가하는 것은 문제가 해결되지 않으며 당신이 mod_rewrite를에 전환 할 수 없다면, 적어도 mod_alias가있는 RedirectMatch에 지시어, 충분있을 수 있습니다 제공? – Keng

+0

예 ... 아래의 idealmachine은 정규식을 사용한다고 말했습니다. 그게 전부가 일치하는 방법 아닌가요? – gravityboy

+0

그리고 Gumbo는 "정규 표현식" – gravityboy

답변

13

RewriteRule is handled by Apache's mod_rewrite, Redirect is handled by mod_alias. 아니, 둘 다 필요하지 않습니다.

RewriteRule (정규 표현식 사용)은 /here과 일치하지 않습니다 (단, /here/foo.html과 같은 경로와 일치합니다). 바로 후 슬래시를 찾고 있기 때문입니다. 질문지를 사용하여 선택 사항으로 설정할 수 있습니다.

RewriteRule ^here(/?.*) http://www.there.com$1 [R=301,L] 

이제 리디렉션과 동일한 효과를 얻을 수 있습니다. 한다 RewriteCond 특정 경로를 제외 추가 할 수 있습니다 : 일부 서버의 mod_rewrite를하지 않아도

RewriteCond $0 !/here/stayhere\.html 

참고 기본적으로 설정.

RedirectMatch 301 ^/here(?!/stayhere\.html)(/?.*) http://www.there.com$1 
+2

리디렉션을 사용하여 다른 부분은 그대로두고 대상과 일치를 대체한다고 말합니다. RewriteRule은 실제로 검색된 부분에서 이월되지 않고 대상으로 완전히 이동합니다. 큰 차이. – ahnbizcad

1

약간 다른 말을하고 있기 때문에 RewriteRule의 아마 작동하지 않았다 네가 리디렉션에 있었던 것보다. RewriteRule에는 주소에 "here"라는 단어가 포함되어야하며 그 뒤에 슬래시가 와야합니다. 리디렉션을하려면 주소에 "여기"라는 단어가 있어야합니다. 은 슬래시 앞에 앞에옵니다. 나는 이런 식으로 뭔가 함께 갈 것입니다 :

RewriteRule ^here/?(.*) http://www.there.com/$1 [R=301,L] 

(가) ? 슬래시는 선택하게 추가하고, 처음에 ^은 "여기"주소의 시작에있을 가질 수 있도록, 그것을하게하지 내부 어디에나.

특정 주소를 제외에 관해서는, 당신이 줄을 사용하여 RewriteRule의 선행하여 해당 작업을 수행 할 것입니다 : 그들은 특별히 그 주소를 요청하는 경우 규칙을 무시하도록 지시

RewriteCond %{REQUEST_URI} !(here/stayhere\.html) 

합니다.

4

Redirect은 경로 접두어와 일치합니다. Redirect 일치 (현명한 경로 세그먼트) 접두사의 어떤 경로 /here하고 새로운 URI에 추가합니다 다음

Redirect 301 /here http://example.com 

그래서 경로의 모든 요청이 /here 시작이의 다음 경로 접미사를 추가 http://example.com 책략로 리디렉션됩니다 /here ~ http://example.com.

이와 대조적으로 RewriteRule은 정규 표현식과 함께 작동합니다. 그 here/ 다음 새로운 URL에 추가됩니다 후

RewriteRule here/(.*) http://example.com/$1 [R=301,L] 

아무것도 :이 경우, 다음 RewriteRulehere/가 포함 된 모든 경로와 일치합니다.

/here으로 시작하는 경로로 URL을 요청할 때 두 가지 지시문 모두 동일한 효과가 있지만 후자는 경로가 here//not/here/foo을 포함하는 모든 요청과도 일치합니다.

또한, 당신은 단지 mod_rewrite를 함께 추가 조건을 사용할 수 있습니다

RewriteCond $0 !=here/stayhere.html 
RewriteRule ^here(/.*)?$ http://example.com$0 [L,R=301] 

당신이 mod_alias가와 동일한 작업을 수행하고자한다면, 당신은 /here/stayhere.html 아무것도하지만 일치하는 정규 표현식 RedirectMatch를 사용해야합니다.

관련 문제