阜阳做网站,中华室内设计网怎么样,口碑营销渠道,中国城乡住房和城乡建设部网站首页背景#xff1a;
root /some/path;
location / {try_files $uri $uri/ /dist/index.html;
}使用React之类的的库来开发前端页面的时候#xff0c;因为是单页应用所以需要上面的Nginx配置#xff0c;用来在找不到html文件的时候内部重定向到/dist/index.html文件。
服务器上…背景
root /some/path;
location / {try_files $uri $uri/ /dist/index.html;
}使用React之类的的库来开发前端页面的时候因为是单页应用所以需要上面的Nginx配置用来在找不到html文件的时候内部重定向到/dist/index.html文件。
服务器上的目录结构是/some/path/dist/assetes网站的静态资源都是存在/some/path/dist/下的而服务器的根目录是/some/path/。
域名localhost.abc.com
现象访问localhost.abc.com/dist/正常访问访问localhost.abc.com/dist/xxx等都正常而直接通过域名localhost.abc.com访问页面则出现403错误。
当访问域名会被location /块捕获这是毋庸置疑的匹配到之后try_files 会尝试第一个参数 / 当前的$uri是 / 也就是/app/app/下只有一个文件夹dist也没有index.html或者index.htm文件所以找不到应该是404然后继续找 // 这个 // 会被如何解析不得而知也找不到404所以最后会知道 /some/path/dist/index.html 这个文件是存在的所以不应该出现403错误应该正常展示才对。
遇到上面的问题主要是因为Nginx的匹配流程不熟悉导致的在访问文件夹的时候如果没有找到index配置的文件例如index.html之类的那么会继续调用autoIndex模块autoIndex模块的值默认是false所以就报没有权限查看这个文件夹的异常异常码是403。
try_files 是不会处理403这个异常的try_files处理的是异常码404所以403这个异常就被直接返回出去了也就是说在第一步匹配 / 的时候就直接返回了。
解决
即使开启autoIndex对于单页应用来说也是十分奇怪的。所以我们可以设置root: /some/path/dist/这样即使访问的是/那么第一个匹配的也是 /some/path/dist/index.html就不会出现访问域名直接报错的尴尬情况。
但是这个问题其实没有解决例如/some/path/dist/xxx/这个目录通过域名访问还是存在上面说的问题/dist/xxx/这个访问还是会报403但是这也无法避免这其实是我们配置导致的如上所述。
除了修改root值的解决方案我们还可以捕获403这个错误然后再重定向到我们的目标文件/some/path/dist/index.html。这就从根本解决了这个问题但是我们网站也没有了403错误这样解决是否合适有待商榷。