在Nginx上将多个WordPress配置在子路径中的方法是什么?

基本上,WordPress無法同時設定多個主題。雖然有一些插件可以允許使用多個主題,但是是否能夠使用取決於核心版本,而且如果使用了帖子名稱作為永久鏈接,指定的主題將不會生效。
因此,我將WordPress分為多個子路徑,才實現了這個目標,這也是我想與大家分享的。

在下面的例子中,我们将两个WordPress配置如下。

URLディレクトリhttp://host/wpone//var/www/wponeroot/wpone/http://host/wptwo//var/www/wptworoot/wptwo/

假设在http://host/上存在WordPress以外的内容,在default.conf中添加以下的include指令。
需要注意的是,假设nginx的配置文件夹位于/etc/nginx。

server {
    :
    :

    include conf.d/sub/wpone.conf
    include conf.d/sub/wptwo.conf

    :
    :
}

以下是两个WordPress的设置,但关键是不要使用alias指令直接指定WordPress的安装目录,而是在root指令指定的目录下,将WordPress安装在与URL子路径同名的子目录中。

location /wpone {
    root /var/www/wponeroot;

    access_log /var/log/nginx/wpone.access.log  main;
    error_log /var/log/nginx/wpone.error.log;

    # wordpress パーマリンク設定
    try_files $uri $uri/ /wpone/index.php?q=$uri&$args;

    include conf.d/sub/wordpress-common;
}
location /wptwo {
    root /var/www/wptworoot;

    access_log /var/log/nginx/wptwo.access.log  main;
    error_log /var/log/nginx/wptwo.error.log;

    # wordpress パーマリンク設定
    try_files $uri $uri/ /wptwo/index.php?q=$uri&$args;

    include conf.d/sub/wordpress-common;
}

以下是两个适用于WordPress的常见设置。
如果多个位置设置有许多共同点,将它们合并到一个文件中并使用include指令导入会提高可维护性。

index index.php;
charset utf-8;

# アクセス拒否設定
location ~* /(wp-config|xmlrpc)\.php {
    deny all;
}

# アクセス制限設定
location ~* /wp-login\.php|/wp-admin/((?!admin-ajax\.php).)*$ {
    index index.php;

    # 外部からのアクセス許可
    allow 87.65.43.21;

    # 自身からのアクセス許可
    allow 12.34.56.78;
    allow 127.0.0.1;

    # 上記以外はアクセス拒否
    deny all;

    include conf.d/sub/fastcgi-for-wordpress;
}

include conf.d/sub/fastcgi-for-wordpress;

如果你希望在同一层级的位置指令中进行访问控制,则只有一个位置指令会被采纳。为了实现上述访问控制,可以将用于php-fpm的设置定义到一个单独的文件中,并将其引入到两个include指令中,这样就能实现对不需要访问控制的PHP文件进行例外处理。

# php-fpm用設定
location ~\.php$ {
    fastcgi_split_path_info ^(.+\.php)(.+)$;
    fastcgi_pass phpfpm;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_param PATH_INFO $fastcgi_path_info;
    include fastcgi_params;
}

将wpone / hoge配置到wptwo的方法

虽然只是一些小技巧,但如果要在 http://host/wpone/hoge 中放置 wptwo,则需要按照以下方式配置反向代理。

location /wpone {
    location /wpone/hoge/ {
        proxy_pass http://localhost/wptwo/;
    }

    :
    :
}
广告
将在 10 秒后关闭
bannerAds