ドメイン名にindex.htmlを設定する方法 https://www.example.com/ -ユーザーをルートディレクトリのindex.htmlに導きます。
私は次のようなさまざまなことを試しました:
server {
# some configs
location = / {
index index.html;
fastcgi_index index.html;
}
or
location / {
index index.html;
fastcgi_index index.html;
}
}
何も私を助けませんでした。
Locationキーワードを使用した他の設定もいくつかありますが、私もコメントしました。
server {
句の他の「場所」設定:
location ~ .*(css|htc|js|bmp|jp?g|gif|ico|cur|png|swf|htm?|html)$ {
access_log off;
root $www_root;
}
location ~ \.php$
{
include /etc/nginx/fastcgi_params;
index index.html;
fastcgi_index index.html;
fastcgi_param SCRIPT_FILENAME $www_root$fastcgi_script_name;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass 127.0.0.1:9000;
# Директива определяет что ответы FastCGI-сервера с кодом больше или равные 400
# перенаправлять на обработку nginx'у с помощью директивы error_page
fastcgi_intercept_errors on;
break;
}
location ~ /\.ht {
deny all;
}
それらはすべてコメントされコメントが外されましたが、何も助けませんでした。
PS Editionは/etc/nginx/sites-enabled/domainname.comファイルで作成されました。
答えは、ルートディレクティブをロケーションディレクティブに配置することです。
root /srv/www/ducklington.org/public_html;
あなたのロケーションブロックであなたができること:
location / {
try_files $uri $uri/index.html;
}
これにより、ngingxは最初に指定された正確な名前のファイルを検索し、そのようなファイルが見つからない場合はuri/index.htmlを試行します。 https://www.example.com/ のリクエストが来ると、最初に完全に一致するファイルを探し、それが見つからない場合はindex.htmlをチェックします
location / {
は最も一般的な場所です(location {
を使用)。 AFAIU のいずれにも一致します。サイトのすべてのサブディレクトリに多くのコンテンツが重複しているため、location / { index index.html; }
を使用するのが有用であるとは思いません。
とのアプローチ
try_files $ uri $ uri/index.html index.html;
上記のコメントで述べたように、サイトに存在してはならないページに対してindex.html
を返します(可能な$uri
はその結果になります)。また、上記の回答で述べたように、try_files
の最後の引数には内部リダイレクトがあります。
あなたのアプローチ
location = / { index index.html;
index
も内部リダイレクトを行うため、これも悪いです。必要な場合は、特定のlocation
でそれを処理できる必要があります。作成する.
location = /index.html {
提案されたように ここ 。しかし、そうすればhttp://example.org/index.html
というリンクが機能することになりますが、これは望ましくない場合があります。私が使用する別のバリアントは次のとおりです。
root /www/my-root;
# http://example.org
# = means exact location
location = / {
try_files /index.html =404;
}
# disable http://example.org/index as a duplicate content
location = /index { return 404; }
# This is a general location.
# (e.g. http://example.org/contacts <- contacts.html)
location / {
# use fastcgi or whatever you need here
# return 404 if doesn't exist
try_files $uri.html =404;
}
追伸 debug nginxは非常に簡単です(バイナリで許可されている場合)。 server {
ブロックに追加するだけです:
error_log /var/log/nginx/debug.log debug;
すべての内部リダイレクトなどが表示されます。
ドキュメントによると、指定された順序でファイルの存在を確認し、最初に見つかったファイルを要求処理に使用します。処理は現在のコンテキストで実行されます。ファイルへのパスは、ルートおよびエイリアスディレクティブに従ってfileパラメーターから構築されます。名前の最後にスラッシュを指定することにより、ディレクトリの存在を確認できます。 「$ uri /」。ファイルが見つからなかった場合、最後のパラメーターで指定されたURIへの内部リダイレクトが行われます。重要
最後のパラメーターで指定されたURIへの内部リダイレクトが行われます。
したがって、最初の2つのパラメーターがfalseを返す場合、最後のパラメーターにページまたはコードを追加する必要があります。
location / {
try_files $uri $uri/index.html index.html;
}
私にとって、(現在最も多く投票されている)回答のtry_files
ディレクティブ https://stackoverflow.com/a/11957896/608359 は、書き換えサイクルにつながりました。
*173 rewrite or internal redirection cycle while internally redirecting
インデックスディレクティブの方が幸運でした。名前の前にスラッシュを使用したことに注意してください。これは、必要な場合とそうでない場合があります。
server {
listen 443 ssl;
server_name example.com;
root /home/dclo/example;
index /index.html;
error_page 404 /index.html;
# ... ssl configuration
}
この場合、404を返すときを含め、すべてのパスが/index.htmlにつながるようにしたかったのです。