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

Nginx如何去除URI中的/shop前缀适配main.php路由传参

推荐配置方案(符合Nginx最佳实践,性能更优)

# 匹配/shop开头的所有请求
location ^~ /shop/ {
    # 先判断请求的文件/目录是否真实存在,存在直接返回,不存在则进入重写规则
    try_files $uri $uri/ @shop_rewrite;
}

# 自定义重写命名location
location @shop_rewrite {
    # 正则匹配捕获/shop之后的所有路径,赋值给route参数
    rewrite ^/shop(.*)$ /shop/main.php?route=$1 last;
}

如果需要和原Apache规则完全对齐,排除指定后缀的静态文件走重写,可以调整为以下配置:

location ^~ /shop/ {
    set $skip_rewrite 0;
    # 请求的文件真实存在则跳过重写
    if (-e $request_filename) {
        set $skip_rewrite 1;
    }
    # 匹配指定静态后缀则跳过重写
    if ($request_uri ~* \.(ico|jpg|png|img)$) {
        set $skip_rewrite 1;
    }
    # 不需要跳过重写的请求执行路径提取
    if ($skip_rewrite = 0) {
        rewrite ^/shop(.*)$ /shop/main.php?route=$1 last;
    }
}

配置说明

  1. 核心逻辑是通过rewrite的正则分组^/shop(.*)$,将/shop之后的路径内容捕获到$1变量,直接传给route参数,即可自动去除前缀。
  2. 如果需要保留原请求携带的其他GET参数,可将rewrite规则修改为:
    rewrite ^/shop(.*)$ /shop/main.php?route=$1&$query_string last;
    
  3. 配置修改完成后执行nginx -t校验配置语法无误后,执行nginx -s reload重载配置即可生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 14:45:11