NginxがURLに関係なく常にindex.htmlを提供するようにするにはどうすればよいですか?
たとえば、URL https://www.example.me/723738
常に提供するhttps://www.example.me/index.html
ユーザーがアドレスバーに入力した元のURLを保持している必要があるため、リダイレクトを使用したくありません。
Nginxの設定を変更して404をindex.htmlにリダイレクトしますが、404応答が返されるため、これを行うのに最適な方法ではないと思います。
今後、ユーザーがアクセスした元のURLをindex.htmlに表示させたいと思うかもしれませんが、これを行う方法はありますか?
ありがとう
質問1の回答1:
探している機能はURL書き換えと呼ばれます。これにより、別のURLにあるリソースを表示するマスク(または「偽の」URL)を作成できます。
Nginxでは、これは構成ファイルのrewrite <regexp-pattern> <target-url>
コマンドによって実現されます。ドメインwww.example.comのNginx構成は次のとおりです。
server {
listen 80;
server_name www.example.com;
root /var/www/example.com;
index index.html;
rewrite ^.*$ /index.html;
}
<regexp-pattern>
(REGular EXPression)の部分は、ブラウザに入力したURLと比較されます。一致が成功すると、<target-url>
のリソースが表示されます。
質問2の回答:
現在のURLは、純粋なHTMLドキュメントのみでは表示できません。サーバー側のスクリプト言語(PHPなど)を使用する必要があります。これにより、動的なコンテンツをユーザーに表示できます。 PHP with Nginx( https://askubuntu.com/a/134676 ))および現在のURLを表示する方法のトピックについて、ガイドの無尽蔵の供給がありますPHP( https://stackoverflow.com/a/6768831 )。
一般的なパターンではtry_files
とデフォルトのURI。ミニマリストの例:
server {
root /path/to/root;
location / {
try_files $uri $uri/ /index.html;
}
}
詳細は このドキュメント を参照してください。
これはあなたが探しているコードです
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
root /var/www/;
index index.html;
location = /favicon.ico { access_log off; log_not_found off; }
error_page 404 =200 /;
}
server_name _;を使用して、任意のIPドメインからリッスンします。