2016-03-04 124 views
1

如何將這些規則從.htaccess(apache)轉換爲Nginx conf?將Apache重寫規則轉換爲Nginx

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^([^/]+)/$ $1.html 
RewriteRule ^([^/]+)/([^/]+)/$ /$1-$2.html 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$ 
RewriteRule (.*)$ /$1/ [R=301,L] 

我使用這些規則改寫像請求:

/someurl1/ => someurl.html (/company/ to /company.html 
/someurl1/someurl2/ => someurl-someurl2.html (/projects/3/ to /projects-3.html) 

我已經嘗試過這種(不工作):

if (!-e $request_filename) { 
    rewrite ^/([^/]+)/$ /$1.html; 
    rewrite ^/([^/]+)/([^/]+)/$ /$1-$2.html; 
} 

try_files $uri $uri/ =404; 

我在哪裏錯了?

回答

1

我已經測試了以下,看來工作:

location/{ 
    try_files $uri $uri/ @rewrite; 
} 
location @rewrite { 
    rewrite ^/([^/]+)/$ /$1.html last; 
    rewrite ^/([^/]+)/([^/]+)/$ /$1-$2.html last; 
    return 404; 
} 

RewriteCond %{REQUEST_FILENAME} !-f測試是由try_files指令實際完成。詳情請參閱this

+0

index.html呢? – Shaels

+0

默認情況下'nginx'將在以'/'結尾的URI呈現時執行'index.html'文件。有關詳細信息,請參見[this](http://nginx.org/en/docs/http/ngx_http_index_module.html#index)。 –

+0

謝謝你,你做了我的一天! – Shaels