Nginx访问无末尾/路径出现404 Not Found问题求助
解决Nginx访问不带末尾斜杠路径返回404的问题
问题原因
你的Nginx配置仅定义了location /buy/(带末尾斜杠)的匹配规则,当请求/buy(无斜杠)时,Nginx找不到对应规则,会默认去root指定的/usr/share/nginx/html目录下查找buy文件或文件夹,而该路径下无对应内容,因此返回404。
解决方案
这里提供两种实用的处理方式:
方式一:重定向无斜杠请求到带斜杠路径
在原有配置中添加一条不带斜杠的location规则,将/buy永久重定向到/buy/:
location /buy { rewrite ^/buy$ /buy/ permanent; }
配置生效后,访问localhost:80/buy会自动跳转到localhost:80/buy/,匹配原有alias规则正常显示页面。
方式二:修改location规则兼容两种路径
将原来的location /buy/替换为支持带/不带斜杠的正则匹配规则:
location ~ ^/buy(/.*)?$ { alias /var/www/buy$1; }
该正则会匹配/buy、/buy/以及/buy/xxx这类路径,$1捕获斜杠后的内容,配合alias能正确映射到/var/www/buy下的对应文件或目录。
同理,/sell路径的问题可以用同样方法解决。
内容的提问来源于stack exchange,提问作者Saggi Bashari
相关产品推荐
相关产品推荐

