You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:48:15