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

NGINX中精准匹配/dir/路径重定向及解决路径冲突方法

解决Nginx中仅匹配/dir/开头路径的alias配置问题

要实现仅匹配以/dir/开头的URL,同时避免file not found错误,核心是处理好location规则和alias路径的匹配逻辑,还要兼顾不带斜杠的/dir请求跳转,具体方案如下:

关键配置步骤

1. 重定向不带斜杠的/dir请求

首先添加精确匹配规则,把访问site.com/dir的请求重定向到site.com/dir/,确保所有路径都统一为带斜杠的格式:

location = /dir {
    return 301 /dir/;
}

2. 配置带斜杠的location与alias

使用^~ /dir/来优先匹配所有以/dir/开头的请求,同时注意**alias路径末尾必须加斜杠**,这样Nginx才能正确把/dir/之后的URI部分映射到目标目录:

location ^~ /dir/ {
    alias /var/www/html/directory/public/;
    # 按需添加站点基础配置
    index index.html index.php;
    # 如果是PHP等动态站点,添加try_files规则适配路由
    try_files $uri $uri/ /dir/index.php?$args;
}

为什么之前会出现404?

你之前用location /dir/或^~ /dir/时出现错误,大概率是因为alias路径末尾没有加斜杠:

  • 当location以/结尾,但alias不带末尾斜杠时,Nginx会把/dir/foo这类请求拼接成/var/www/html/directory/publicfoo,自然找不到文件
  • 给alias加上末尾斜杠后,/dir/foo会正确映射到/var/www/html/directory/public/foo

备选:正则匹配方案

如果你偏好正则规则,也可以用以下配置(同样需要配合/dir的跳转规则):

location ~ ^/dir/(.*)$ {
    alias /var/www/html/directory/public/$1;
    index index.html index.php;
}

不过正则规则的优先级低于^~,如果站点有其他正则location,推荐优先用^~的方案,避免匹配冲突。

内容的提问来源于stack exchange,提问作者Denny

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 19:43:36