这是包含静态 html 文件的目录
public
|-- index.html
|-- media
| `-- blurred_image-8.jpg
|-- post
| `-- 13considerations
| `-- index.html
我正在尝试配置 nginx 来转换所有以 结尾的 URL,以.html
删除后缀。
像这样:-
server {
listen 80;
server_name mysite.com;
location / {
root /var/www/mysite/public;
try_files $uri $uri/ $uri/index.html;
}
location /media/ {
alias /var/www/mysite/public/media/;
error_page 404 = /404;
expires 30d;
}
location /static/ {
alias /var/www/mysite/public/static/;
error_page 404 = /404;
expires 30d;
}
}
这对于主页来说很有效“http://mysite.com/“但如果我尝试访问”http://mysite.com/post/13considerations/“,我收到 500 内部服务器错误。
是什么赋予了?
答案1
您使用的示例适用于返回目录文件的内容index.html
,但不适用于文件(例如,http://server/somedir/file
不会返回的内容/somedir/file.html
)。
简化的配置,将返回任何不带扩展名的 HTML 文件和将用于index.html
目录如下:
server {
listen 80;
server_name mysite.com;
index index.html;
root /var/www/mysite/public;
location / {
try_files $uri $uri/ @htmlext;
}
location ~ \.html$ {
try_files $uri =404;
}
location @htmlext {
rewrite ^(.*)$ $1.html last;
}
}
怎么运行的:
index index.html
当访问目录 URI 时,指定将默认使用此文件。- 放置
root
在location
块之外将适用于整个服务器。 try_files $uri $uri/ @htmlext
将首先寻找文件或目录的完全匹配,然后才最终尝试附加.html
。try_files $uri =404
是为了防止 Nginx 在找不到文件时陷入重写循环。rewrite ^(.*)$ $1.html last
附加.html
并重新启动 URI 匹配过程。