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

Nginx代理子域名到带#promo的子域名时WordPress返回404求助

问题原因

URL中的哈希(#promo这类)是浏览器端专属的标识符,不会随HTTP请求发送到服务器。你当前的Nginx配置里,proxy_pass后加#promo完全无效,服务器(WordPress)接收不到这个哈希值,只会处理https://app.domain.com/的根路径请求。同时你设置了Host头为promo.app.domain.com,而WordPress没有配置这个子域名对应的站点或页面,所以返回404错误。

解决方案

以下是几种可行的解决思路,按实现复杂度排序:

方案1:直接代理到促销页面的真实路由

如果你的促销页面在WordPress中有对应的真实URL(比如https://app.domain.com/promo/,是一个自定义页面),直接修改Nginx配置,代理到该路径:

server {
    server_name promo.app.domain.com;
    location / {
        proxy_set_header Host app.domain.com; # 用原主域名的Host头,让WordPress识别到对应站点
        proxy_pass https://app.domain.com/promo/;
        proxy_redirect off;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

这样访问promo.app.domain.com时,会直接代理到真实的促销页面,WordPress能正常识别,你可以在这个页面的编辑器里直接配置SEO标签(比如用Yoast SEO插件)。

方案2:通过自定义HTTP头部传递促销页面标识

如果促销页面只有前端Ajax触发的逻辑,没有真实后端路由,可通过Nginx添加自定义头部,让WordPress识别并加载对应内容、输出SEO标签。

步骤1:修改Nginx配置

server {
    server_name promo.app.domain.com;
    location / {
        proxy_set_header Host app.domain.com;
        proxy_set_header X-Promo-Page "true"; # 添加自定义头部标记
        proxy_pass https://app.domain.com/;
        proxy_redirect off;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

步骤2:在WordPress中处理头部并调整内容/SEO

在主题的functions.php中添加以下代码:

// 输出促销页面专属SEO标签
add_action('wp_head', 'render_promo_seo_tags');
function render_promo_seo_tags() {
    if (isset($_SERVER['HTTP_X_PROMO_PAGE']) && $_SERVER['HTTP_X_PROMO_PAGE'] === 'true') {
        // 移除默认title标签,替换为促销页面标题
        remove_action('wp_title', '_wp_render_title_tag', 10);
        echo '<title>限时促销 - 你的网站名</title>';
        
        // 添加促销页面的meta描述
        echo '<meta name="description" content="这里是促销页面的描述内容,吸引用户点击">';
        
        // 可添加其他SEO标签,比如og:title、og:description等
        echo '<meta property="og:title" content="限时促销 - 你的网站名">';
        echo '<meta property="og:description" content="这里是促销页面的描述内容,吸引用户点击">';
    }
}

// 替换首页内容为促销页面内容
add_filter('the_content', 'replace_home_with_promo_content');
function replace_home_with_promo_content($content) {
    // 仅在首页且检测到促销头部时替换内容
    if (is_front_page() && isset($_SERVER['HTTP_X_PROMO_PAGE']) && $_SERVER['HTTP_X_PROMO_PAGE'] === 'true') {
        // 这里可以直接输出促销内容,或者引入模板文件
        ob_start();
        get_template_part('templates/promo'); // 假设主题中有templates/promo.php文件
        $promo_content = ob_get_clean();
        return $promo_content;
    }
    return $content;
}

之后创建templates/promo.php文件,写入促销页面的HTML内容即可。

方案3:使用WordPress多站点功能

如果需要长期维护独立的促销页面,推荐启用WordPress多站点,将promo.app.domain.com设为一个独立站点:

  1. 修改WordPress的wp-config.php,添加多站点配置:
define('WP_ALLOW_MULTISITE', true);
define('MULTISITE', true);
define('SUBDOMAIN_INSTALL', true);
define('DOMAIN_CURRENT_SITE', 'app.domain.com');
define('PATH_CURRENT_SITE', '/');
define('SITE_ID_CURRENT_SITE', 1);
define('BLOG_ID_CURRENT_SITE', 1);
  1. 登录WordPress后台,在“网络设置”中添加promo.app.domain.com作为新站点。
  2. 直接在这个新站点中创建促销页面,独立配置SEO规则,无需Nginx反向代理(仅需DNS将子域名指向服务器IP)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 08:25:21