web-dev-qa-db-ja.com

アドレスバーのURLを維持しながらルートをサブディレクトリにリダイレクトする方法

私はこのようなフォルダ構造を持つnginxセットアップを持っています:

- www
  |- splash
  |- blog

wwwはルートフォルダです。

http://example.comにアクセスするユーザーをsplashフォルダーにリダイレクトしたいと思います。

しかし、アドレスバーのURLをhttp://example.com/splashに変更したくありません。

アドレスバーのURLはhttp://example.comのままです。

このルールは、ユーザーがルートフォルダーにアクセスする場合にのみ適用されます。

一方、blogフォルダへのアクセスは、通常どおりhttp://example.com/blogを介して行われます。

どうすればこれを達成できますか?これまでのところ、私のconfは次のとおりです((機能しませんが、URLが変更されます)

server {
        listen 80;
        server_name www.example.com;
        root /www;
        location = / {
                rewrite ^/(.*)$ splash/$1 permanent;
        }
}
3
Goni

各コンテキストは独自のルートを持つことができます。

locationコンテキストがあるので、ルートを変更するだけです。

例えば。

location = / {
    root /www/splash;
}

ドキュメントは入手可能です ここ 。ドキュメントに記載されている例は次のとおりです。

location  /i/ {
  root  /spool/w3;
}

「/i/top.gif」を要求すると、ファイル「/spool/w3/i/top.gif」が返されます。

したがって、基本的には、そのほぼコピーですが、場所が完全に一致する=があることを除きます。


/ splash/blogというファイルがある場合、そのURLを/ splash/blogまたは/ blogに移動しますか?

ファイルに優先順位を付ける別の方法は、try_filesを使用することです。例えば:

location / {
    try_files /splash/$uri $uri =404;
}

この場合、/ splashに一致するファイルがある場合はそれが表示され、それ以外の場合は$ uriが代わりに表示されます。最後の場合は404エラーが表示されます。

1
ronalchn

それで全部です ...

server {
        listen 80;
        server_name www.mysite.com;
        root /www;

        location = / {
                root /www/splash;
        }

        location / {
                root /www;
        }


}
0
cadmi

私があなたの状況を正しければ、これは私のために働きました:

location ~/splash.* {
    return 200 "The request was $uri";
}

location / {
    rewrite ^/$ /splash/ last;
    root   /usr/share/nginx/html;
    index  index.html index.htm;
}

から Nginx docs

最後に、ngx_http_rewrite_moduleディレクティブの現在のセットの処理を停止し、変更されたURIに一致する新しい場所の検索を開始します。

ディレクトリ/ splash /を作成したくなかったので、Nginxにハードコードされたテキストで応答するように指示しました。必要なディレクティブに置き換えることができます。

0
HUB