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

如何在Nginx中配置目录重写 将example.com/public/page改写为example.com/page

你之前的配置匹配规则和需求方向相反,所以无法生效:你当前配置匹配的是用户访问带/public/前缀的请求,但你的需求是处理用户访问不带/public/前缀的请求,映射到实际/public目录下的业务逻辑。

下面是两种可行的配置方案,按需选择:


方案1:内部重写(用户地址栏保持example.com/page不变,无跳转)

适合需要隐藏public目录、不希望用户感知路径前缀的场景,SEO友好。

# 放在server配置块内
location / {
    # 优先匹配站点根目录下的静态资源,不存在则进入重写规则
    try_files $uri $uri/ @rewrite_public;
}

location @rewrite_public {
    # 将路径参数传递给public目录下的index.php处理
    rewrite ^/(.+)$ /public/index.php?url=$1 last;
}

# 可选配置:禁止直接访问带/public前缀的路径,避免出现重复内容
location ~ ^/public/ {
    rewrite ^/public(/.*)?$ $1 permanent;
}

方案2:强制跳转重定向(访问带/public的地址自动跳转至无前缀地址,地址栏变化)

适合需要统一访问路径、旧地址需要迁移的场景。

server {
    listen 80;
    server_name example.com;
    # 注意root要指向public目录的上级目录,不要直接指向public目录
    root /www/your_site_root;

    # 所有带/public前缀的请求永久301跳转至无前缀路径
    rewrite ^/public(/.*)?$ $1 permanent;

    location / {
        try_files $uri $uri/ /public/index.php?url=$uri$is_args$args;
    }

    # 保留你原有PHP解析配置即可,示例如下
    location ~ \.php$ {
        fastcgi_pass 127.0.0.1:9000; # 替换为你实际的PHP-FPM监听地址
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

生效操作

配置修改完成后,先执行nginx -t验证配置语法是否正确,确认返回test is successful后,执行对应环境的Nginx重载命令即可生效,常见重载命令为systemctl reload nginx。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 20:00:01