基本 nginx 配置(将 URL 映射到文件并隐藏其他所有内容)

基本 nginx 配置(将 URL 映射到文件并隐藏其他所有内容)

我正在努力

/ -> /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/; }

不确定这是否是最优雅的解决方案,但它似乎有效。

相关内容