如何在NGINX中跳过URI中的目录?配置需求与尝试说明
嘿,我来帮你搞定这个Nginx配置的问题!你想要让访问mywebsite.com/indev/xxx的时候,实际读取服务器上/indev/dist/xxx的文件,对吧?你的原有配置方向反了,所以达不到预期效果,我给你两种靠谱的解决方案:
方案一:用Rewrite规则实现
这种方式通过重写请求路径,把不带dist的请求转到dist目录下,配置起来很灵活:
location ^~ /indev/ { # 把 /indev/xxx 重写为 /indev/dist/xxx,重写后重新匹配规则 rewrite ^/indev/(.*)$ /indev/dist/$1 last; } # 可选:如果你需要允许直接访问dist目录(比如测试用),可以保留这个location location ~ /indev/dist/ { try_files $uri $uri/ =404; # 这里可以加缓存、过期时间之类的配置,按需添加 }
方案二:用Alias指令直接映射
这种方式更直接,直接把/indev请求路径映射到服务器上的dist目录,适合静态文件和PHP混合的场景:
location ^~ /indev/ { # 这里一定要写服务器上的绝对路径,结尾的斜杠别漏! alias /path/to/your/server/files/indev/dist/; try_files $uri $uri/ =404; # 如果你的目录里有PHP文件,必须加这段解析配置 location ~ \.php$ { # 这里的PHP-FPM地址根据你的实际版本调整,比如php7.4-fpm.sock fastcgi_pass unix:/run/php/php8.2-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $request_filename; include fastcgi_params; } }
关键细节说明
^~ /indev/:这个规则会优先匹配所有以/indev/开头的请求,避免被其他通用的正则规则(比如全局的.php匹配)提前拦截,保证你的配置能生效。- 方案一的
rewrite:核心就是把/indev/后面的所有内容,拼接到/indev/dist/后面,last参数会让Nginx用新的路径重新匹配location,确保后续的文件访问规则能正常工作。 - 方案二的
alias:和root不同,alias是直接替换请求路径的前缀,所以结尾的斜杠一定要和目录结构对应,否则会出现路径拼接错误。
为什么你的原有配置没用?
你原来写的location ~ .*/indev/dist.*是用来匹配**已经包含dist的请求,但你的需求是处理不包含dist**的请求,把它们转到dist目录下,所以匹配方向完全反了,自然达不到效果啦。
内容的提问来源于stack exchange,提问作者FireController1847
相关产品推荐
相关产品推荐

