2017-06-07 1 views
0

nginxのののerror.logファイルを使用してみると、私たちは2つの不正確なパターンの一つとして今後の要求を確認することができます。Nginxは、URLに欠落した "/"または "/ bla /"を挿入できませんか?

する必要があります - >が http://www.example.com/app-context/moduleA/controller1
  • http://www.example.com/app-contextcontroller2する必要があります

    現在のNginxの設定は次のようになります:

    server { 
    
        listen  8080; 
    
        location /app-context/ { 
    
        proxy_redirect  off; 
        proxy_set_header Host $host; 
        proxy_pass http://localhost:8888/app-context/; 
        } 
    } 
    

    最初の間違ったURLの欠落/後のアプリケーションコンテキストを挿入するか、2番目の間違ったURLの/ moduleB /を挿入しないことが課題です。それはtry_filesがそれをサポートするようには見えないし、私は書き直しでそれを行う方法を見つけていない。

    両方のユースケースのURLをNginxが書き換える方法はありますか?特に、モジュールやコントローラのすべての名前を事前に知る必要はありません。多くのものがありますので、書き換えルールの「ハードコーディング」は面倒です。

  • +0

    '^(/アプリ-コンテキスト)を書き換えます([^ /].+)$ $ 1/$ 2 last; ' – Deadooshka

    答えて

    1

    かなりの数のオンラインリソースを見て、試行錯誤しながら、私は良い十分な解決策に来ることができました:、例えば

    location /app-context { 
        location ~ (moduleA|moduleB) { 
         # inserts a forward slash after app-context if not there, 
         # e.g. /app-contextmoduleA/foo/bar to /app-context/moduleA/foo/bar 
         rewrite ^(/app-context(?!/))(.*) $1/$2 break; 
         try_files $uri @proxy; 
        } 
        # inserts /defaultModule/ after app-context 
        # e.g. /app-context/controller1 to /app-context/defaultModule/controller1 
        rewrite ^(/app-context(?!/defaultModule/))(.*) $1/defaultModule/$2 break; 
        try_files $uri @proxy; 
    } 
    
    location @proxy { 
        proxy_redirect  off; 
        proxy_set_header Host $host; 
        proxy_pass http://localhost:8888; 
    } 
    
    1

    これらはあなたの例のケースを処理する必要があります

    location /app-context { 
         rewrite ^(/app-contextmoduleA)/(.*)$ /app-context/moduleA/$2 permanent; 
         rewrite ^(/app-contextcontroller2) /app-context/moduleB/controller2 permanent; 
         ... 
        } 
    

    詳細はngx_http_rewrite_moduleを確認してください。

    +0

    多くのモジュールとコントローラがあるので、moduleAとcontroller2を"任意の文字 "で置き換える必要があります。 たとえば、 '\/app-context(?!\/moduleA)(。*)'では、修正が必要なパターンを見つけることができます。 – Philippe

    関連する問題