2016-06-11 57 views
1

如何將Apache的前綴匹配轉換爲Nginx?轉換重寫規則前綴從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並不差。它會工作。唯一的是人們更喜歡nginx中的return指令,因爲它有點快(nginx需要做更少的處理)。


我不是很熟悉apache重寫,所以我可能是我對他們的解釋稍有不妥,但我相信,你只需要rewrite網址下/test1/foo/bar。爲了這個目的,你甚至都不需要rewrite指令,你可以在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使其使用regex是慢一點:

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