私はこのようなフォルダ構造を持つ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;
}
}
各コンテキストは独自のルートを持つことができます。
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エラーが表示されます。
それで全部です ...
server {
listen 80;
server_name www.mysite.com;
root /www;
location = / {
root /www/splash;
}
location / {
root /www;
}
}
私があなたの状況を正しければ、これは私のために働きました:
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にハードコードされたテキストで応答するように指示しました。必要なディレクティブに置き換えることができます。