Azure环境下WordPress子目录多站点Nginx配置故障求助
WordPress子目录多站点Nginx配置问题解决方案
关键问题分析
- 域名配置不匹配:wp-config.php中
DOMAIN_CURRENT_SITE设置为example.net,但实际主站点域名是example.com,导致子站点路由逻辑混乱。 - Nginx server_name错误:server_name包含路径(
example.net/da),违反Nginx配置规范,server_name仅用于匹配域名,子目录需通过URI规则处理。 - PHP请求路由规则缺失:对于子站点下不存在的PHP文件(如
/da/wp-admin/index.php),Nginx未正确转发至根目录index.php处理,导致404错误。 - 静态资源路由问题:子站点请求静态资源时,Nginx未正确映射到共享的
wp-content目录,导致"File not found"。
分步修复
1. 修正wp-config.php域名配置
打开wp-config.php,确保DOMAIN_CURRENT_SITE与实际主站点域名一致:
define( 'DOMAIN_CURRENT_SITE', 'example.com' ); // 替换为你的主站点域名
2. 调整Nginx server_name配置
编辑Nginx配置文件(通常位于/home/etc/nginx/conf.d/default.conf),移除server_name中的路径部分:
server_name example.com www.example.com; // 仅保留域名,移除/example.net/da这类路径
3. 优化主请求路由规则
修改location /块的try_files规则,确保子目录请求正确传递参数至根目录index.php:
location / { try_files $uri $uri/ /index.php$is_args$args; }
$is_args会自动识别是否存在查询参数,比?$args更严谨,避免参数丢失。
4. 修复PHP请求处理规则
修改location ~* \.php$块,添加try_files规则,将不存在的PHP文件请求转发至根目录index.php:
location ~* \.php$ { #NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini try_files $uri /index.php$is_args$args; // 添加此行 include fastcgi.conf; include fastcgi_params; fastcgi_intercept_errors on; fastcgi_pass php; fastcgi_read_timeout 300; fastcgi_cache_bypass $skip_cache; fastcgi_no_cache $skip_cache; fastcgi_cache off; fastcgi_cache_valid 60m; }
5. 验证静态资源路由
确保静态资源规则正确,无需修改现有location ~* \.(js|css|png|jpg|jpeg|gif|ico)$块,但需确认root路径指向正确的WordPress根目录(/home/site/wwwroot)。
应用配置并重启服务
通过Azure App Service的启动脚本或SSH执行以下步骤:
- 保存修改后的Nginx配置文件。
- 重启Nginx服务:
service nginx restart
或通过Azure门户重启应用服务,确保配置生效。
额外排查点
- 确认
cgi.fix_pathinfo = 0已在php.ini中设置,避免PHP路径解析错误。 - 检查WordPress多站点网络设置中的子站点URL是否与实际访问路径一致(如
example.com/da)。 - 清除浏览器缓存和WordPress缓存(若使用缓存插件),避免旧缓存导致的异常。
内容的提问来源于stack exchange,提问作者Sigurd Mazanti
相关产品推荐
相关产品推荐

