2016-06-11 2 views
1

Nginx와 일치하는 Apache 접두사를 변환하는 방법은 무엇입니까?재 작성 규칙 접두어를 Apache에서 Nginx로 변환

RewriteCond %{REQUEST_URI} ^/test1 
RewriteRule ^(.*)$ http://newsite/$1 [R=301,L] 

RewriteCond %{REQUEST_URI} ^/foo 
RewriteRule ^(.*)$ http://newsite/$1 [R=301,L] 

RewriteCond %{REQUEST_URI} ^/bar 
RewriteRule ^(.*)$ http://newsite/$1 [R=301,L] 

또는

RewriteRule ^/test1/(.*)$ http://newsite/test1/$1 [R=301,L] 
RewriteRule ^/foo/(.*)$ http://newsite/foo/$1 [R=301,L] 
RewriteRule ^/bar/(.*)$ http://newsite/bar/$1 [R=301,L] 

는이 같은가요?

location/{ 
    rewrite ^/(test1|foo|bar)/(.*)$ http://newsite/$1/$2 permanent; 
    ... 
} 

답변

1

rewrite는 나쁘지 않습니다. 효과가있을 것입니다. 유일한 것은 사람들이 return 지시어를 nginx에 선호하기 때문에 조금 더 빠릅니다 (nginx는 처리가 덜 필요함). 내가 apache 재 작성에 익숙하지 않다


그래서 나는 그들을 나의 해석에 약간 틀릴 수도 있지만 난 당신 만 /test1, /foo/bar에서 rewrite URL을한다고 생각합니다. 이를 위해 당신도 rewrite 지침이 필요하지 않습니다, 당신은 regex 조금 느린 사용 nginx

location /test1 { 
    return 301 http://newsite$request_uri; 
} 
location /foo { 
    return 301 http://newsite$request_uri; 
} 
location /bar { 
    return 301 http://newsite$request_uri; 
} 
location/{ 
    ... # pages on this domain 
} 

에 간단한 return으로 그것을 만들 수 있습니다 :

location ~ /(test1|foo|bar) { 
    return 301 http://newsite$request_uri; 
} 

그리고 당신은 rewrite을 사용할 수 있습니다 당신이 정말로 원한다면 지시어도 :

location ~ /(test1|foo|bar) { 
    rewrite^http://newsite$request_uri permanent; 
} 
+0

이것은'/ test1/aaaa' 오른쪽에서도 유효합니다. – Kokizzu

+1

@Kokizzu - 수정. 'location/test1'은 ** 접두어 일치 **이며'/ test1/aaaa'와 일치합니다. 또한'$ request_uri'는 doiman 이후의 모든 것을 포함합니다 (즉,/test/aaaa). – grochmal