我有一个目录,有时存在,有时不存在。 如果要求和存在,其中的所有文件应该可用,例如像这样
location /my_dir { root /other/www/root }
因此,如果用户要求http://myhost.example.com/my_dir/file和/my_dir存在,则应该提供服务。 但是,如果/other/www/root/my_dir不存在,nginx 应该像从未定义位置块那样操作,并使用正常的规则来处理请求。 具体来说,如果目录不存在,客户端就不应该知道这个特殊的规则,即不应该有用户可见的指示符。
一个想法是把默认的configuration放在一个命名的位置,并将上面的行改为下面的代码(参考如何用指定的位置写一个DRY模块化的nginx conf(反向代理) ):
location /my_dir { root /other/www/root try_files $uri $uri/ @default; } location / { error_page 418 = @default; return 418; } location @default { # all default stuff like the default root, index etc. goes here }
这是有道理的还是有更好的办法?
更新
以下是nginx的两个configuration示例:
# Example 1 server { listen 80; listen [::]:80; server_name www.example.com example.com root /var/www/www.example.com index index.html index.htm } # Example 2 server { listen 80; listen [::]:80; server_name www.example.com example.com return 301 https://$server_name/$request_uri }
在每种情况下,我/my_dir为/my_dir位置添加特殊的规则,但是只有当前存在特殊的根目录/other/www/root才会这样。 如果没有,客户端不应该注意/my_dir位置的特殊处理。