web-dev-qa-db-ja.com

Nginxを取得して常にインデックスを提供する

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に表示させたいと思うかもしれませんが、これを行う方法はありますか?

ありがとう

4
Cherona

質問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 )。

2
Marek Rost

一般的なパターンではtry_filesとデフォルトのURI。ミニマリストの例:

server {
    root /path/to/root;
    location / {
        try_files $uri $uri/ /index.html;
    }
}

詳細は このドキュメント を参照してください。

9
Richard Smith

これはあなたが探しているコードです

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ドメインからリッスンします。

0