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

配置Nginx实现子目录访问多语言WordPress博客(Laravel共存)

问题分析与修正方案

先解决WordPress内部重定向问题

当前重定向到blog.mydomain.com是因为WordPress后台的站点URL配置仍为旧的子域名地址,必须先修改:

  • 登录WordPress后台,进入「设置-常规」页面
  • 将「WordPress地址(URL)」和「站点地址(URL)」修改为:
    • 默认语言(如en):https://mydomain.com/blog
    • 法语(fr):https://mydomain.com/fr/blog
  • 若使用多语言插件(如Polylang),需在插件设置里将语言URL结构改为「前缀模式」,移除子域名配置

修正后的Nginx配置

以下是调整后的完整Nginx配置片段,解决路径映射、PHP解析和路由回退的问题:

server {
    listen 80;
    server_name mydomain.com;

    # Laravel 主站配置
    location / {
        root /home/forge/mydomain.com/public;
        try_files $uri $uri/ /index.php?$query_string;

        location ~ \.php$ {
            fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include fastcgi_params;
        }
    }

    # 非语言前缀的博客访问(默认语言)
    location ^~ /blog {
        alias /home/forge/blog.mydomain.com/public;
        index index.php;
        # 修正回退路由,避免跳转到Laravel入口
        try_files $uri $uri/ /blog/index.php?$args;

        location ~ \.php$ {
            include fastcgi_params;
            # 使用$request_filename确保alias下PHP路径正确
            fastcgi_param SCRIPT_FILENAME $request_filename;
            fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
        }
    }

    # 带语言前缀的博客访问(en/fr)
    location ~ ^/(?<lang>en|fr)/blog {
        alias /home/forge/blog.mydomain.com/public;
        index index.php;
        # 回退路由需带上语言前缀,确保WP识别对应语言
        try_files $uri $uri/ /$lang/blog/index.php?$args;

        location ~ \.php$ {
            include fastcgi_params;
            fastcgi_param SCRIPT_FILENAME $request_filename;
            # 传递语言参数给WordPress,辅助多语言插件识别
            fastcgi_param WP_LANG $lang;
            fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
        }
    }
}

关键调整说明

  1. ^~ /blog:用^~提升该路由优先级,避免被Laravel的根路由或正则路由提前匹配
  2. 带语言前缀的回退URL:原配置的/blog/index.php会跳转到默认语言博客,改为/$lang/blog/index.php才能正确路由到对应语言的博客入口
  3. PHP路径正确性:使用alias时,SCRIPT_FILENAME必须用$request_filename,否则会导致PHP文件路径解析错误
  4. 语言参数传递:通过fastcgi_param WP_LANG $lang把语言标识传给WordPress,辅助多语言插件处理内容路由

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 05:27:33