2017-01-12 19 views
2

これはSO beforeで尋ねられましたが、回答は一般化されていません。だからここに行く。スクリプトに渡す前にURLからサブディレクトリを削除するにはどうすればよいですか?

私は2つの異なるWebアプリケーションを持っています。彼らはルート上の別のサーバー上に作成されました。しかし今、彼らは同じサーバー上のサブディレクトリに配置されます。以下のスクリプトはURIと共にサブディレクトリをスクリプトに送ります。これは問題だ。

歳のURL:

新しいURL:

/items/1をご覧になりたいときは店舗サイト/store/items/1が見えます。同じことがバックオフィスのサイトにも当てはまります。

私の試みは:

location /store { 
      try_files @store_site; 
    } 

    location /backoffice { 
      try_files @backoffice_site; 
    } 

    location @store_site { 
      include uwsgi_params; 
      uwsgi_pass unix:/var/run/uwsgi/store_site.sock; 
      proxy_set_header Host $host; 
    } 

    location @backoffice_site { 
      include uwsgi_params; 
      uwsgi_pass unix:/var/run/uwsgi/backoffice_site.sock; 
      proxy_set_header Host $host; 
    } 

ここでも、店のサイトは/store接頭辞でURLを取得しているとバックオフィスは/backofficeを得ています。これらのサイトは、これらのプレフィックスを期待しないようにコード化されています。実際のサイトに送信する前に、接頭辞/store/backofficeを削除する必要があります。

これは書き換えルールのものですか?

this SO pageに基づいてこれを試してみましたが、うまくいきませんでした。私は構文について何かを理解してはいけません。

location /store { 
     rewrite ^/store/(.*) /$1; 
     try_files $uri @store_site; 
} 

更新

どうやら、この作品(break;を追加しました)これは完全なソリューションですか?

location /store { 
     rewrite ^/store/(.*) /$1 break; 
     try_files $uri @store_site; 
} 
+0

多かれ少なかれ完全な解決策です。あなたのサイトの詳細に依存します。 – Dayo

答えて

2

breakで示されているように、リダイレクトをトリガーせずにURIを書き換える必要があります。すべてがバックエンドに行くべきか、nginxのは、このような静的ファイルなど、いくつかのリクエストを処理する必要があるかどうか、あなたはどちらかが必要になりますかどうか、あなたのセットアップの詳細に応じて、

...

location /store { 
    try_files $uri @store_site; 
} 

location /backoffice { 
    try_files $uri @backoffice_site; 
} 

location @store_site { 
    rewrite ^/store/(.*) /$1 break; 
    include uwsgi_params; 
    uwsgi_pass unix:/var/run/uwsgi/store_site.sock; 
} 

location @backoffice_site { 
    rewrite ^/backoffice/(.*) /$1 break; 
    include uwsgi_params; 
    uwsgi_pass unix:/var/run/uwsgi/backoffice_site.sock; 
} 

...か

location /store { 
    rewrite ^/store/(.*) /$1 break; 
    include uwsgi_params; 
    uwsgi_pass unix:/var/run/uwsgi/store_site.sock; 
} 

location /backoffice { 
    rewrite ^/backoffice/(.*) /$1 break; 
    include uwsgi_params; 
    uwsgi_pass unix:/var/run/uwsgi/backoffice_site.sock; 
} 
+0

下のスラッシュがない場合は下の私の答えに従って、nginxはstore /および/または何かなどを保存する – gubble

1

私はあなたがアイテムのためにこれをしようと提案する:

location /store/ { 
    rewrite ^/store/(.*) /$1 break; 
    include uwsgi_params; 
    proxy_set_header Host $host; 
    uwsgi_pass unix:/var/run/uwsgi/store_site.sock; 
} 

はそれをテストしていませんが、私はそれが動作するはずだと思います。

+0

私はここの店からのトップレベルのURLを言及しないようにしたいと思います。それは数多くあり、それらをすべて列挙することになるからです。 /店舗の一部を切り取って残りの部分を送る方法はありませんか? – 010110110101

+0

私は参照してください。私はそれをわずかに変更しましたが、間違いなく店舗の場所にはスラッシュが必要です。そうでなければ/ storeajshasも一致します – gubble

関連する問題