web-dev-qa-db-ja.com

スクリプトに渡す前にURLからサブディレクトリを削除する方法は?

これは SO before で尋ねられましたが、答えは一般化されていません。だからここに行く。

2つの異なるウェブアプリがあります。それらはルートの異なるサーバー上にあるように作られました。しかし、それらは同じサーバー上のサブディレクトリに配置されます。以下のスクリプトは、URIとともにサブディレクトリをスクリプトに送信しています。これは問題です。

古いURL:

新しいURL:

ストアサイトは、/store/items/1だけを表示したいときに/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;
}
9
010110110101

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;
}
13
Dayo

これをアイテムに試してみることをお勧めします:

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

テストはしていませんが、動作するはずです。

3