2017-12-12 23 views
1

この質問が何度か尋ねられた場合は、私はnginxを適切に書き直すことはできません。私はURLの最後の部分を削除する必要があります。たとえば、これはURL私が持っている:nginx URLを書き換えて最後の部分を削除

https:/mydomain.com/this/is/some/url/page/0 
https:/mydomain.com/this/is/some/url/page/1 

が、私はこれにこれらの両方を書き換える必要があります。

https:/mydomain.com/this/is/some/url 

これは私がこれまでにしようとしているものです:

location/{ 

    ... 
    rewrite ^/(.*)/page/0|1$ $1 last; 

    ... 
} 

しかし、それは動作しません。それは正しいと私には思われますか?それは何が間違っていますか? (私は正規表現が嫌い)。

EDIT:

location/{ 
    # Remove trailing double slashes. 
    if ($request_uri ~ "^[^?]*?//") { 
     rewrite "^" $scheme://$host$uri permanent; 
    } 
    # Remove trailing slashes. 
    rewrite ^/(.*)/$ /$1 permanent; 

    # Rewrite page/0 and page/1 from url. 
    rewrite ^/(.*)/page/[01]$ /$1 last; 

    proxy_pass      http://backend_web; 
    proxy_set_header    Host $host; 
    proxy_set_header    X-Real-IP $remote_addr; 
} 
+1

'rewrite ... last'は、プロキシを通過したURIを' backend_web'に変更します。ブラウザのアドレスバーに表示されるURIを変更するには、代わりに 'rewrite ... redirect'を使用する必要があります。 –

答えて

1

0|1は括弧内であるか、文字クラスとして再定義する必要があります。

書き換えられたURIの先頭には/が必要です。すべてnginxのURIは先頭に/となっています。

したがって、これらのすべてが同等でなければなりません:

rewrite ^/(.*)/page/(0|1)$ /$1 last; 
rewrite ^/(.*)/page/[01]$ /$1 last; 
rewrite ^(/.*)/page/[01]$ $1 last; 

正規表現のための有益なウェブサイトがありますhere

+0

お返事ありがとうございます。しかし最後の 'page/0'や' page/1'は削除されません。私はその質問を編集した。私は設定から​​詳細を追加しました。 – Nurjan

関連する問題