我有这个文件夹结构:
/document/root/
|-- main
`-- wishlist
我想让我的nginx像这样工作:如果我将浏览器指向example.com/wishlist
,它将在index.html
文件夹中显示wishlist
。如果我将浏览器指向example.com
,我希望它回退到main/index.html
(当然还有相关的main/style.css
和主目录中的其他文件。)
我不想为我根目录下的每个文件夹写一个位置规则,所以我希望它尽可能通用。我找到了this questtion,它帮助我完成了大部分工作,但是有些东西不起作用:如果我将浏览器指向wishlist/index.html
,它就能完美运行。但是,如果我删除index.html
并将其指向example.com/wishlist
,则浏览器将返回404.我当前的Nginx配置位于下方。有人能指出我正确的方向吗?感谢。
server {
listen 80;
listen [::]:80;
server_name example.com www.example.com;
root /document/root/main;
location ~ ^/([^/]+)(/.+)?$ {
if (!-d "$document_root/$1") {
return 404;
}
try_files /$1$2 /main$2 =404;
}
}
答案 0 :(得分:2)
您需要为索引文件做的只有:
index index.html
location / {
try_files $uri.html $uri/index.html =404;
}
location /wishlist {
try_files $uri.html $uri/index.html =404;
}
答案 1 :(得分:2)
保持简单:
server {
root /document/root/main/;
index index.html;
location /wishlist {
root /document/root/;
}
}
答案 2 :(得分:1)
原来我发现了一种对我有用的方法:在nginx上使用自定义location / {
root /document/root/main;
index index.html;
try_files $uri $uri/ index.html;
}
location ~ ^/(.+)$ {
root /document/root;
index index.html;
try_files $uri $uri/ index.html @main;
}
location @main {
try_files /main/$uri /main/$uri/;
}
。我的最后一段代码就是这样的:
example.com
现在/document/root/main
使用example.com/wishlist
作为根,/document/root/wishlist
使用flock(..., LOCK_EX)
:)希望这有助于其他人。