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

为何Nginx服务器中子文件夹的nginx.conf重写规则被忽略?

Nginx子目录dummyimage重写规则失效解决方法

问题背景

在WordPress的子文件夹中部署dummyimage占位图生成工具,子目录根目录的nginx.conf负责将所有请求转发到同目录的code.php?x=....。此前在Apache服务器上,等效的.htaccess文件运行正常,但切换到Nginx后,子目录内的重写规则完全失效,切回Apache则恢复正常。

问题原因

  1. Nginx不自动加载子目录配置:Apache支持每个目录放置.htaccess并自动读取,但Nginx默认不会加载子目录下的nginx.conf,必须在主配置中显式引入或直接将规则写入主配置。
  2. 路径匹配错误:原配置中的重写规则使用根路径/作为匹配起点,但工具部署在子目录下,所有请求路径都包含子目录前缀,原规则无法匹配到这些请求。
  3. 重写目标路径错误:原规则中转发的/code.php是根路径下的文件,而非子目录内的code.php,导致请求转发到错误位置。

修正后的Nginx配置示例

假设工具部署在子目录/dummy/(请替换为实际子目录名),将以下规则添加到WordPress站点的主Nginx配置中:

# Nginx Rewrite rules for dummyimage (部署在/dummy/子目录)
location ^~ /dummy/ {
    # 处理数字开头的尺寸请求,比如/dummy/123x456.jpg
    rewrite ^/dummy/([\d].*) /dummy/code.php?x=$1$args last;

    # 标准广告尺寸别名规则
    # Square Pop Up 250x250
    rewrite ^/dummy/(s\w+pop)(.*) /dummy/code.php?x=250x250$2 last;
    # Vertical Banner 120x240
    rewrite ^/dummy/(ver\w+ban)(.*) /dummy/code.php?x=120x240$2 last;
    # Full Banner 468x60
    rewrite ^/dummy/(f\w+ban)(.*) /dummy/code.php?x=468x60$2 last;
    # Half Banner 234x60
    rewrite ^/dummy/(h\w+ban)(.*) /dummy/code.php?x=234x60$2 last;
    # Micro Bar 88x31
    rewrite ^/dummy/(m\w+bar)(.*) /dummy/code.php?x=88x31$2 last;
    # Button 1 120x90
    rewrite ^/dummy/(b\w+1)(.*) /dummy/code.php?x=120x90$2 last;
    # Button 2 120x60
    rewrite ^/dummy/(b\w+2)(.*) /dummy/code.php?x=120x60$2 last;
    # Square Button 125x125
    rewrite ^/dummy/(s\w+but)(.*) /dummy/code.php?x=125x125$2 last;
    # Leaderboard 728x90
    rewrite ^/dummy/(lea\w+rd)(.*) /dummy/code.php?x=728x90$2 last;
    # Wide Skyscraper 160x600
    rewrite ^/dummy/(w\w+sk\w+r)(.*) /dummy/code.php?x=160x600$2 last;
    # Skyscraper 120x600
    rewrite ^/dummy/(sk\w+r)(.*) /dummy/code.php?x=120x600$2 last;
    # Half Page Ad 300x600
    rewrite ^/dummy/(h\w+g)(.*) /dummy/code.php?x=300x600$2 last;
    # Medium Rectangle 300x250
    rewrite ^/dummy/(me)\w+(rec\w+)(.*) /dummy/code.php?x=300x250$3 last;
    # Vertical Rectangle 240x400
    rewrite ^/dummy/(ver)\w+(rec)(.*) /dummy/code.php?x=240x400$3 last;
    # Large Rectangle 336x280
    rewrite ^/dummy/(large|lrg)(rec)(.*) /dummy/code.php?x=336x280$3 last;
    # Rectangle 180x150
    rewrite ^/dummy/(rec)(.*) /dummy/code.php?x=180x150$2 last;
    # Pop Under 720x300
    rewrite ^/dummy/(pop)(.*) /dummy/code.php?x=720x300$2 last;

    # 显示标准别名规则
    # CGA 320x200
    rewrite ^/dummy/(cga)(.*) /dummy/code.php?x=320x200$2 last;
    # QVGA 320x240
    rewrite ^/dummy/(qvga)(.*) /dummy/code.php?x=320x240$2 last;
    # VGA 640x480
    rewrite ^/dummy/(vga)(.*) /dummy/code.php?x=640x480$2 last;
    # WVGA 800x480
    rewrite ^/dummy/(wvga)(.*) /dummy/code.php?x=800x480$2 last;
    # SVGA 1024x600
    rewrite ^/dummy/(svga)(.*) /dummy/code.php?x=1024x600$2 last;
    # WSVGA 1024x600
    rewrite ^/dummy/wsvga(.*) /dummy/code.php?x=1024x600$1 last;
    # XGA 1024x768
    rewrite ^/dummy/(xga)(.*) /dummy/code.php?x=1024x768$2 last;
    # WXGA 1280x800
    rewrite ^/dummy/(wxga)(.*) /dummy/code.php?x=1280x800$2 last;
    # WSXGA 1440x900
    rewrite ^/dummy/(wsxga)(.*) /dummy/code.php?x=1440x900$2 last;
    # WUXGA 1920x1200
    rewrite ^/dummy/(wuxga)(.*) /dummy/code.php?x=1920x1200$2 last;
    # WQXGA 2560x1600
    rewrite ^/dummy/(wqxga)(.*) /dummy/code.php?x=2560x1600$2 last;

    # 视频标准别名规则
    # NTSC 720x480
    rewrite ^/dummy/(ntsc)(.*) /dummy/code.php?x=720x480$2 last;
    # PAL 768x576
    rewrite ^/dummy/(pal)(.*) /dummy/code.php?x=768x576$2 last;
    # HD720 1280x720
    rewrite ^/dummy/(hd720)(.*) /dummy/code.php?x=1280x720$2 last;
    # HD1080 1920x1080
    rewrite ^/dummy/(hd1080)(.*) /dummy/code.php?x=1920x1080$2 last;

    # 处理图片后缀请求,若文件不存在则转发到code.php
    location ~* \.(png|jpg|jpeg|gif)$ {
        try_files $uri /dummy/code.php?x=$uri$args;
    }

    # 捕获404请求,转发到code.php处理
    error_page 404 = @dummy404;
}

location @dummy404 {
    rewrite ^/dummy/(.*) /dummy/code.php?x=$1$args last;
}

关键修改说明

  1. 统一子目录前缀:所有规则都添加了/dummy/前缀(替换为实际子目录名),确保匹配子目录下的请求。
  2. 合并location块:将原配置中分散的location块合并到主/dummy/的location下,避免Nginx匹配优先级问题。
  3. 修正重写目标路径:所有转发目标都指向子目录内的/dummy/code.php,而非根路径。
  4. 添加last标记:每个rewrite规则末尾添加last,确保Nginx处理完当前规则后停止匹配其他规则,避免冲突。
  5. 调整图片请求处理:将原独立的图片location合并到子目录规则内,确保子目录下的图片请求被正确处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 07:57:55