私はnginxにすべてのURLをきれいに表示させたいです。
いくつかの研究で、私は最初のケースを作成しました。これは、次の構成によって行われます。
location / {
root html;
index index.html index.htm index.php;
try_files $uri.html $uri/ =404;
}
Indexhtmlとして表示されるindexhtml.htmlには機能しますが、.phpでは何も起こりません。 $ uri.htmlを$ uri.phpに変更すると、.htmlでも.phpでも機能しません。私はPHPの場所に似たようなものを入れようとしましたが、成功しませんでした。
何かアドバイスはありますか?
私が調査したものから、/ etc/nginx/conf.d/domain.tld.confファイルを追加して含める場合:
location / {
try_files $uri $uri.html $uri/ @extensionless-php;
index index.html index.htm index.php;
}
location ~ \.php$ {
try_files $uri =404;
}
location @extensionless-php {
rewrite ^(.*)$ $1.php last;
}
次に、nginxを再起動して試してください。これがお役に立てば幸いです!より多くの情報を見つけることができます(私が見つけたところ) ここで@ tweaktalk.net
余分なブロックや名前付きの場所などは必要ありません。 index
行も移動します ロケーションブロックの外側
server {
index index.html index.php;
location / {
try_files $uri $uri/ $uri.html $uri.php$is_args$query_string;
}
location ~ \.php$ {
try_files $uri =404;
# add fastcgi_pass line here, depending if you use socket or port
}
}
/folder/xyz/
や/folder/xyz.php
のように、同じフォルダー内に同じ名前のフォルダーとファイルがある場合、フォルダーxyz
にはindex.php
またはindex.html
が含まれますが、これに留意してください。
さらに Mohammadの答え にするには、.html
および.php
から拡張機能なしのバージョンへのリダイレクトを提供することもできます。
これは、 $request_uri
に「完全な元のリクエストURI(引数付き)」が含まれ、ユーザーに表示されない内部書き換えの影響を受けないという事実により実現できます。
server {
index index.html index.php;
location / {
if ($request_uri ~ ^/(.*)\.html$) { return 302 /$1; }
try_files $uri $uri/ $uri.html $uri.php?$args;
}
location ~ \.php$ {
if ($request_uri ~ ^/([^?]*)\.php($|\?)) { return 302 /$1?$args; }
try_files $uri =404;
# add fastcgi_pass line here, depending if you use socket or port
}
}
おそらくこれはあなたのために役立つかもしれません...それは簡単で、仕事を終わらせます:
location / {
rewrite ^/([^\.]+)$ /$1.html break;
}