配置Nginx实现子目录访问多语言WordPress博客(Laravel共存)
问题分析与修正方案
先解决WordPress内部重定向问题
当前重定向到blog.mydomain.com是因为WordPress后台的站点URL配置仍为旧的子域名地址,必须先修改:
- 登录WordPress后台,进入「设置-常规」页面
- 将「WordPress地址(URL)」和「站点地址(URL)」修改为:
- 默认语言(如en):
https://mydomain.com/blog - 法语(fr):
https://mydomain.com/fr/blog
- 默认语言(如en):
- 若使用多语言插件(如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; } } }
关键调整说明
^~ /blog:用^~提升该路由优先级,避免被Laravel的根路由或正则路由提前匹配- 带语言前缀的回退URL:原配置的
/blog/index.php会跳转到默认语言博客,改为/$lang/blog/index.php才能正确路由到对应语言的博客入口 - PHP路径正确性:使用
alias时,SCRIPT_FILENAME必须用$request_filename,否则会导致PHP文件路径解析错误 - 语言参数传递:通过
fastcgi_param WP_LANG $lang把语言标识传给WordPress,辅助多语言插件处理内容路由
内容的提问来源于stack exchange,提问作者EchoAro
相关产品推荐
相关产品推荐

