我正在努力
/ -> /foo/index.html
/(about|people|contact) -> /foo/(about|people|contact).html
/blah.(jpg|css|js) -> /foo/blah.(jpg|css|js)
但是也
/index.html -> 404
/(about|people|contact).html -> 404
* -> 404
到目前为止我已经:
# Serve our home page.
location / {
root /foo/;
}
location = / {
alias /foo/;
}
location ~ /(about|people|contact) {
default_type text/html;
alias /foo/$1.html;
}
location ~ /(.+\.(jpg|css|js)) {
root /foo/;
}
虽然这会通过非 .html URL 公开我想要公开的文件,但它不会 404 任何文件。
在此先感谢您的帮助。
答案1
问题是我尝试过的第一件事(我的问题中没有提到),
location = / { alias /foo/index.html; }
结果是
"/var/www/intro/index.htmlindex.html" is not a directory
在上面的问题中,我将其更改为至少可以为页面服务的内容,并加上一行无用的内容来传达我的意图:
location / { root /foo/; }
location = / { alias /foo/; } # seems to be ignored
从http://ngxbot.lustfield.net/logs/%23nginx/2012/01/%23nginx.19.log我发现你可以用以下方法替换第二行:
location = / { root /foo/; rewrite ^ /index.html break; }
然后将location /
点移到其他地方,例如一个空目录:
location / { root /var/www/; }
不确定这是否是最优雅的解决方案,但它似乎有效。