插件窝 干货文章 WordPress中怎么开启多站点支持及Nginx的重写规则配置

WordPress中怎么开启多站点支持及Nginx的重写规则配置

fastcgi php WordPress 配置 1019    来源:    2025-04-26

WordPress多站点支持开启及Nginx配置指南

开启WordPress多站点功能

1. 准备工作

  • 确保您有服务器管理员权限
  • 备份您的WordPress网站和数据库
  • 确认您的WordPress是标准安装(非多站点)

2. 开启多站点功能

  1. 编辑wp-config.php文件

    /* 在"define('WP_DEBUG', false);"这行之前添加 */
    define('WP_ALLOW_MULTISITE', true);
    
  2. 刷新WordPress后台

    • 登录WordPress后台
    • 进入"工具" → "网络设置"
  3. 选择网络类型

    • 子域名(如site1.yourdomain.com)
    • 子目录(如yourdomain.com/site1)
  4. 按照提示完成设置

    • WordPress会提供额外的代码添加到wp-config.php和.htaccess文件中

Nginx重写规则配置

1. 基本多站点配置

对于子域名类型的多站点:

server {
    listen 80;
    server_name ~^(www\.)?(?<sitename>.+)\.example\.com$;
    root /var/www/wordpress;

    index index.php;

    location / {
        try_files $uri $uri/ /index.php?$args;
    }

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

    # 其他必要配置...
}

对于子目录类型的多站点:

server {
    listen 80;
    server_name example.com www.example.com;
    root /var/www/wordpress;

    index index.php;

    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    # 处理子目录站点的PHP请求
    location ~ ^/[_0-9a-zA-Z-]+/.*\.php$ {
        rewrite ^/([_0-9a-zA-Z-]+)/.*$ /$1 last;

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

    # 其他必要配置...
}

2. 完整Nginx多站点配置示例

server {
    server_name example.com *.example.com;
    root /var/www/wordpress;

    index index.php;

    # 通用重写规则
    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    # 禁止访问敏感文件
    location ~* ^/(wp-config.php|wp-config-sample.php|readme.html|license.txt) {
        deny all;
    }

    # 禁止访问隐藏文件和目录
    location ~ /\. {
        deny all;
    }

    # PHP处理
    location ~ \.php$ {
        try_files $uri =404;
        include fastcgi_params;
        fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }

    # 静态文件缓存
    location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
        expires max;
        log_not_found off;
    }

    # 多站点特定规则
    if (!-e $request_filename) {
        rewrite /wp-admin$ $scheme://$host$uri/ permanent;
        rewrite ^(/[^/]+)?(/wp-.*) $2 last;
        rewrite ^(/[^/]+)?(/.*\.php) $2 last;
    }
}

常见问题解决

  1. 404错误

    • 检查Nginx配置中的try_files指令是否正确
    • 确保WordPress的固定链接设置正确
  2. PHP文件下载而非执行

    • 检查fastcgi_pass是否正确指向PHP-FPM
    • 确认SCRIPT_FILENAME参数设置正确
  3. 子站点无法访问

    • 确保DNS设置正确(对于子域名类型)
    • 检查Nginx配置中的server_name是否包含通配符
  4. 权限问题

    • 确保Nginx用户对WordPress目录有读取权限
    • 检查上传目录权限(通常应为755或775)

完成配置后,不要忘记重新加载Nginx配置:

sudo nginx -t  # 测试配置
sudo systemctl reload nginx  # 重新加载配置