2009-08-02 2 views

답변

5

재귀를 방지하려면 %{QUERY_STRING}의 쿼리 문자열이 이미 다른 규칙에 의해 변경되었을 수 있습니다 대신으로 request line 확인해야 :

RewriteCond %{THE_REQUEST} ^GET\ /\?(([^&\s]*&)*)tag=([^&\s]+)&?([^\s]*) 
RewriteRule ^(.*)$ /tag/%3?%1%4 [L,R=301] 

그런 다음 다시 쓸 수있는 충돌없이 다시 내부적으로 요청 :

RewriteRule ^tag/(.*) index.php?tag=$1 [L] 
+3

앤드류 무어와 검보 고마워요. 근데 고마워요. 나는 성공하지 못한 채 1 주일 이상의 해결책을 찾으려고합니다. Gumbo가 제시 한 해결책으로 문제가 해결되었습니다. 내가 모르는 사람들을 돕고 자하는 사람들을 만날 때 우리는 더 나은 세상을 가질 수 있다고 확신합니다. 죄송합니다. 오류는 있지만 영어 지식은 매우 제한적입니다. 감사하고 싶습니다. Vera – Vera

+0

@Vera : 메시지 : – Gumbo

+0

비슷한 게시물의 다른 모든 stackoverflow 답변을 할 수 없으면 내 문제가 해결되었습니다. 감사 –

6

는 다음과 같은 시도 :

RewriteCond %{QUERY_STRING} ^tag=(.+)$ 
RewriteRule ^(.*)$ http://www.example.com/tag/%1 [L] 

보통, 재 작성은 반대의 효과를 달성하는 데 사용됩니다. 정말로 다음과 같이하고 싶지 않습니까?

RewriteRule ^tag/(.+)$ index.php?tag=$1 [L] 
0
나는이 같은 URL로 변환하려고했다

:

이 같은 URL에
http://java.scandilabs.com/faq?key=Contents_of__gitigno 

:

http://scandilabs.com/technology/knowledge/Contents_of__gitigno 

원래의 쿼리 문자열 폐기 끝에 물음표의 추가와 함께 나를 위해 일한 위의 앤드류의 응답 :

RewriteCond %{HTTP_HOST} ^java 
RewriteCond %{QUERY_STRING} ^key=(.+)$  
RewriteRule ^(.*)$ http://scandilabs.com/technology/knowledge/%1? [R=301,L] 

주 경우를 아파치 2.4 이상 버전에서 물음표 대신 QSD 플래그를 사용할 수 있습니다.