阿哥论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 427|回复: 0

Apache + PHP-FPM 与 WordPress 多站点问题

[复制链接]

2024

主题

1

好友

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

优秀会员 助人为乐 辛勤工作 技术精英 多才多艺 优秀班竹 灌水天才 星球管理 宣传大使 灌水之王 财富勋章 版主勋章 动漫勋章 勤奋会员 论坛精英 PS高手 心 8 闪游皮肤 双鱼座 8★8➹ 志愿者 乖

发表于 2015-4-17 16:38:37 |显示全部楼层
apache + PHP-FPM 与 WordPress 多站点问题

前些天切换服务器到 CentOS 7 上的 Apache 2.4,在使用 MPM event + PHP-FPM 的时候遇到了 ProxyPassMatch 与运行子目录(SubDirectory)形式的 WordPress 多站点(MultiSite)不匹配的问题。结果访问子站点的仪表盘就发现Css文件和js文件无法正确加载,遭遇 404 错误。这里是水景一页的修正方法。

捣鼓了很长时间都没解决,甚至一度切回了 Apache 的 prefork 模式。研究了很久的 MPM event + php-FPM 的配合方式,才发现问题出在 Apache 配置文件中使用 ProxyPassMatch 传递请求给 PHP-FPM 的文件名正则表达式匹配规则上面。就像 phpMyAdmin 使用的 ProxyPassMatch 与一般的不同一样,针对 WordPress 多站点也需要增加一条匹配规则。这里只讨论了 WordPress 使用子目录方式启用多站点功能的情况。

1. 普通非多站点的 WordPress 情况

对于没有运行多站点模式的 WordPress,按照一般的 event + PHP-FPM 协作规则,只需要设置好 PHP-FPM 的监听方式为,

listen = 127.0.0.1:9000

然后给每个 Apache 中定义的虚拟主机配置文件中的 <VirtualHost *:80> 中增加一条,

<IfModule mpm_event_module>    ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/path/to/webroot/$1</IfModule>

即可正常解析 Apache 接收到的访问 php 页面请求。

2. 对于启用了多站点的 WordPress

启用了子目录形式的多站点之后,WordPress 可以在一个安装下展示多个站点,网址形式就是,

http://linuxde.net/liveinmanchester/

直接访问域名是主站点,后面的 liveinmanchester 就是一个子站点。水景一页这里开启了多个子站点,其中一些的链接显示在了本页面的右上角。

前面的基本的 ProxyPassMatch 规则对主站点来说没问题,但是对子站点来说就不对了。因为子站点的链接里都带上了 /liveinmanchester/ 这么一节,比如仪表板中的文章页面,

http://linuxde.net/liveinmanchester/wp-admin/edit.php

实际访问的 php 文件在服务器的系统应该是,

http://linuxde.net/wp-admin/edit.php

这就导致 PHP-FPM 按照访问路径匹配不到实际的 edit.php 文件从而出错。

解决办法就是,将一般的 ProxyPassMatch 规则改为,

<IfModule mpm_event_module>    ProxyPassMatch ^/([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes)/.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/path/to/webroot/$2    ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/path/to/webroot/$1</IfModule>

前一行 ProxyPassMatch 规则是仿照 WordPress 多站点模式中的 Mod_Rewrite 重写访问链接的规则写的,目的就是去掉网址中的子站点目录那一节,使得 PHP-FPM 能找到正确的 php 文件。

3. 其它问题

除了上一节提到的访问子站点仪表盘时可能定位不到实际的 php 文件的问题外,对于新部署的 WordPress 多站点,因为 WordPress 会在部署多站点的时候调节主站点的网站目录结构(是网址结构,而不是实际的文件结构),也可能会遇到问题。比如分类(category)和标签(tag)页面。

启用多站点前,WordPress 的一般分类(category)和标签(tag)页面网址为:

linuxde.net/category/vpslinuxde.net/tag/vps

而启用了子目录形式的 WordPress 多站点以后,它们的网址变成了,

linuxde.net/blog/category/vpslinuxde.net/blog/tag/vps

于是也会出现类似上面 2 中提到的无法找到页面的问题,遭遇 404 错误。

此时,只需要在 WordPress 主站点的仪表盘中的工具 –> 固定链接页面的 Category base和 Tag base 那里分别填写 category和 tag 并保存即可。(当然也可以填写别的短语,比如 cat 和 t 。)就能解决打开此类页面出现 404 not found 错误的问题。

相信这样的问题在 Apache 2.4.10 中启用 SetHandler 方式后就不会出现了。

摘自:http://www.linuxde.net/2014/12/15628.html
Apache + PHP-FPM 与 WordPress 多站点问题

该会员没有填写今日想说内容.
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

回顶部