【问题标题】:nginx rule for two locations for files in one directory一个目录中文件的两个位置的 nginx 规则
【发布时间】:2016-02-27 09:52:20
【问题描述】:

我有以下目录:

]# ls /srv/web/logs/
yellow-log  blue-log  log.css

我想要两个链接:

  • example.com/yellow-log
  • example.com/blue-log

nginx 规则应该是什么样的?我试过了:

location ~* ^/(?:yellow|blue)-log(?:/|.html)?$ {
    alias /srv/web/logs;
}

但这抱怨缺少索引。我只是希望在为它们发出请求时提供这些页面中的每一个,并且它们都应该驻留在同一个目录中。两者都使用相同的log.css 文件。

【问题讨论】:

  • alias 应该是root。但我不明白你的“日志”文件是什么文件类型,或者你打算如何提供 CSS 文件。
  • @RichardSmith 日志文件是常规 HTML 文件,并且都链接到 CSS 文件。

标签: nginx location webserver rule


【解决方案1】:

你有一半的解决方案。问题是当您的意思是root 时您使用alias 并且您没有CSS 文件的路径。假设 CSS 文件是相对于 HTML 文件的,它的 URI 实际上是 example.com/log.css。日志文件没有扩展名,因此需要default_type

一种解决方案是:

location ~* ^/(?:yellow|blue)-log$ {
  default_type text/html;
  root /srv/web/logs;
}
location = log.css { root /srv/web/logs; }

【讨论】:

  • 呵呵,default_type 选项是我不知道的。谢谢!但是,如果我使用您提供的配置,请求仍会导致 404,因为对 example.com/yellow-log 的请求会在日志文件中产生此错误:"/srv/web/logs/yellow-log/index.html" is not found
  • @mart1n 这可能在您的配置文件(或浏览器)的其他位置。但是有些东西正在将example.com/yellow-log 重写为example.com/yellow-log/。我在测试环境中没有看到。
  • 哈,你又说对了。我添加了一条规则来从所有请求中删除尾部斜杠,现在它可以工作了:rewrite ^/(.*)/$ /$1 permanent;。谢谢!
猜你喜欢
  • 2012-03-23
  • 2016-05-21
  • 2019-02-10
  • 1970-01-01
  • 2018-02-24
  • 2012-11-17
  • 1970-01-01
  • 1970-01-01
  • 2016-05-30
相关资源
最近更新 更多