2

とてもシンプルだと思っていたのですが、大変なことになりました。

私はこのように定義されたnginxの下の仮想ホストを持っています

server {

    listen 80;
    server_name test.com;
    root   /var/apps/failover/;
    location / {
                index  index.html index.htm;
            }
} 

私がやりたいのは、request_uriが設定されているすべてのリクエスト(例:test.com/something)がtest.com/にのみ送信されることです。

ユーザーを仮想ホストのルートにリダイレクトするURIの一種のワイルドカードが必要です。

書き換えステートメントの組み合わせを何度も試しましたが、何も機能しませんでした。

シンプルなはずなのに、うまく動かせない。

4

2 に答える 2

0

私があなたの権利を理解しているなら、あなたはあなたのサイトに来るすべてのリクエストが何らかのindexファイルによって処理されることを望んでいます、そうですか?追加のパスなしでリクエストがドメイン名のみに書き換えられる場合、他に何を考えられるかわからないので、それは真実だと思います。

したがって、そのような仮定で、もう1つの質問があります:永続的なリダイレクトとしてhttpステータスコードでユーザーをリダイレクトしますか(ユーザーは知っています) 301 、それとも バック情報なしでアプリ内でソフトにリダイレクトしますか(ユーザーは知りません)

最初のものであれば、この書き換えディレクティブが機能するはずlocationです。ブロックの前に貼り付けてください。

rewrite /.+ / permanent ;

2番目のディレクティブが機能する場合は、このディレクティブをブロックrewriteの前に貼り付けます。location

rewrite ^/.* / last;

locationまた、パスを提供するブロックが必要です/

location / {
   try_files index.html =404;
}

これlocationとディレクティブを使用すると、アプリは常にファイルを使用するか、httpステータスコードで返さtry_filesれる必要があるため、アプリに何が発生しても問題はありません(エラーが見つかりません)。index.html404

それはあなたを助けますか、それともあなたは何か違うものを探していますか?

于 2013-02-04T20:47:51.080 に答える
0

私はついにそれを次のようなもので動作させました:

 server {
    listen 80;
    server_name text.com;
    root   /var/apps/failover/;
    location / {
      index index.html;
      error_page 404 =200 /index.html;
    }
 }

それが最善の方法かどうかはわかりませんが、正常に機能し、必要なことを実行します

于 2013-02-05T03:20:50.870 に答える