Apache 2.4+;FPM&x2B;Wordpress Multisite:URL重写在管理中不起作用

Apache 2.4+;FPM&x2B;Wordpress Multisite:URL重写在管理中不起作用,wordpress,apache,.htaccess,mod-rewrite,Wordpress,Apache,.htaccess,Mod Rewrite,我刚刚将Wordpress多站点从Apache2.4Prefork+mod_php移动到一个新服务器上,该服务器使用Apache2.4Event+php fpm 该网站在前端运行良好,由于CGI,它比以前快了很多,但是。。。Wordpress管理面板仅用于主站点(和网络管理)。 第二个站点的管理区域不再工作,但是前端工作得很好 例子 =>有效 =>出现错误404 我试图调试重写,但我拥有的唯一日志(也使用调试级别8)是 遵循我的配置。 谢谢你的帮助。多谢各位 虚拟主机 <Virtual

我刚刚将Wordpress多站点从Apache2.4Prefork+mod_php移动到一个新服务器上,该服务器使用Apache2.4Event+php fpm

该网站在前端运行良好,由于CGI,它比以前快了很多,但是。。。Wordpress管理面板仅用于主站点(和网络管理)。 第二个站点的管理区域不再工作,但是前端工作得很好

例子

  • =>有效
  • =>出现错误404
我试图调试重写,但我拥有的唯一日志(也使用调试级别8)是

遵循我的配置。 谢谢你的帮助。多谢各位

虚拟主机

<VirtualHost *:80>
ServerName www.example.com
DocumentRoot "/srv/www/example.com/public_html"
<IfModule mpm_event_module>
ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/srv/www/example.com/public_html/$1
</IfModule>
<Directory "/srv/www/example.com/public_html">
AllowOverride all
Require all granted
</Directory>
ErrorLog /srv/www/example.com/logs/error_log
TransferLog /srv/www/example.com/logs/access_log
</VirtualHost>

服务器名www.example.com
DocumentRoot“/srv/www/example.com/public_html”
ProxyPassMatch^/(.\.php(/.*)$fcgi://127.0.0.1:9000/srv/www/example.com/public_html/$1
允许超越所有
要求所有授权
ErrorLog/srv/www/example.com/logs/error\u log
TransferLog/srv/www/example.com/logs/access\u log
.htaccess

<Files "xmlrpc.php">
Order Allow,Deny
Deny from all
</Files>

# BEGIN WordPress
<IfModule mod_rewrite.c>
Options +FollowSymLinks

RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]

# uploaded files
RewriteRule ^([_0-9a-zA-Z-]+/)?files/(.+) wp-includes/ms-files.php?file=$2 [L]

# add a trailing slash to /wp-admin
RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]

RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(admin|content|includes).*) $2 [L]
RewriteRule ^([_0-9a-zA-Z-]+]/)?(.*\.php)$ $2 [L]
RewriteRule . index.php [L]
</IfModule>
# END WordPress

命令允许,拒绝
全盘否定
#开始WordPress
选项+FollowSymLinks
重新启动发动机
重写基/
重写规则^index\.php$-[L]
#上传文件
重写规则^([_0-9a-zA-Z-]+/)?文件/(.+)可湿性粉剂包括/ms-files.php?文件=$2[L]
#在/wp admin中添加尾部斜杠
重写规则^([_0-9a-zA-Z-]+/)?wp admin$$1wp admin/[R=301,L]
RewriteCond%{REQUEST_FILENAME}-f[或]
RewriteCond%{REQUEST_FILENAME}-d
重写规则^-[L]
重写规则^([_0-9a-zA-Z-]+/)?(可湿性粉剂-(管理|内容|包括)。*)$2[L]
重写规则^([[u 0-9a-zA-Z-]+]/)?(.\.php)$$2[L]
重写规则。index.php[L]
#结束WordPress

不确定是否找到了解决方案。我想分享一下我们对这个问题的解决方案

我们刚刚在apache配置中添加了以下几行代码。这会将正则表达式中的所有项目转发到FPM

ProxyPassMatch ^/([_0-9a-zA-Z-]+/)?(wp-(admin|activate|blog-header|comments-post|config|cron|links-opml|load|login|mail|settings|signup|trackback)\.php(/.*)?)$ fcgi://127.0.0.1:9000/var/www/html/$2

不确定你是否找到了解决方案。我想分享一下我们对这个问题的解决方案

我们刚刚在apache配置中添加了以下几行代码。这会将正则表达式中的所有项目转发到FPM

ProxyPassMatch ^/([_0-9a-zA-Z-]+/)?(wp-(admin|activate|blog-header|comments-post|config|cron|links-opml|load|login|mail|settings|signup|trackback)\.php(/.*)?)$ fcgi://127.0.0.1:9000/var/www/html/$2

我添加了一个不同的解决方案,因为尽管它对我有效,但它仍然会抛出
proxy\u fcgi
错误:

[proxy_fcgi:error] Got error 'Primary script unknown\n'
解决方案包括删除调用PHP FPM的ProxyPassMatch方法,并包括一个处理程序来管理对
目录
环境的PHP调用:

<Directory "/path/to/host/root">
   # rest of configuration...
   <FilesMatch \.php$>
      SetHandler "proxy:unix:/path/to/socket.sock|fcgi://localhost"
   </FilesMatch>
</Directory>

#配置的其余部分。。。
SetHandler“代理:unix:/path/to/socket.sock|fcgi://localhost"

我添加了一个不同的解决方案,因为尽管它对我有效,但它仍然会抛出
代理\u fcgi
错误:

[proxy_fcgi:error] Got error 'Primary script unknown\n'
解决方案包括删除调用PHP FPM的ProxyPassMatch方法,并包括一个处理程序来管理对
目录
环境的PHP调用:

<Directory "/path/to/host/root">
   # rest of configuration...
   <FilesMatch \.php$>
      SetHandler "proxy:unix:/path/to/socket.sock|fcgi://localhost"
   </FilesMatch>
</Directory>

#配置的其余部分。。。
SetHandler“代理:unix:/path/to/socket.sock|fcgi://localhost"

当我将WordPress multisite从本地XAMPP安装移动到带有Apache 2.4.29和php fpm的Ubuntu 18.04服务器时,我遇到了完全相同的问题,因此找到了这篇文章

我发现以下资源对同样在这方面苦苦挣扎的每个人都很有帮助,但它们对我来说并不是现成的:

  • 同一个问题,不同的soloution方法,但对我来说并不适用:

  • php fpm上的Apache文档,提供了一些有用的解释性示例,甚至Wordpress的示例(但没有多站点特定的示例):

我没有使用
ProxyPassMatch
而是在虚拟主机中为迁移的页面使用以下Apache配置:

...
    <FilesMatch "\.php$">
        <If "-f %{REQUEST_FILENAME}">
            SetHandler "proxy:unix:/run/php/php7.4-fpm.sock|fcgi://localhost/"
        </If>
    </FilesMatch>
...
。。。
SetHandler“proxy:unix:/run/php/php7.4-fpm.sock|fcgi://localhost/"
...
通过这种配置,apache可以识别Wordpress Mulisite.htaccess,从而应用多站点路由的重写规则。由于if语句,只有现有的php文件被传递给php fpm


到目前为止,对于前端和管理页面,主路由和
/en/
路由都能正确解析。

当我将WordPress multisite从本地XAMPP安装移动到带有Apache2.4.29和php fpm的Ubuntu18.04服务器时,我遇到了完全相同的问题,因此找到了这篇文章

我发现以下资源对同样在这方面苦苦挣扎的每个人都很有帮助,但它们对我来说并不是现成的:

  • 同一个问题,不同的soloution方法,但对我来说并不适用:

  • php fpm上的Apache文档,提供了一些有用的解释性示例,甚至Wordpress的示例(但没有多站点特定的示例):

我没有使用
ProxyPassMatch
而是在虚拟主机中为迁移的页面使用以下Apache配置:

...
    <FilesMatch "\.php$">
        <If "-f %{REQUEST_FILENAME}">
            SetHandler "proxy:unix:/run/php/php7.4-fpm.sock|fcgi://localhost/"
        </If>
    </FilesMatch>
...
。。。
SetHandler“proxy:unix:/run/php/php7.4-fpm.sock|fcgi://localhost/"
...
通过这种配置,apache可以识别Wordpress Mulisite.htaccess,从而应用多站点路由的重写规则。由于if语句,只有现有的php文件被传递给php fpm


到目前为止,主路由和
/en/
路由对于前端和管理页面都能正确解析。

我对其进行了一点修改:
ProxyPassMatch“^/([u 0-9a-zA-Z-]+\/)((wp-(admin;activate;blog header;comments post;config;cron;links opml;load;login;mail;settings;signup;trackback))\/.*.php(\.*)fcgi://127.0.0.1:9000/var/www/phoenix/$2"enablereuse=on
我对它做了一点修改:
ProxyPassMatch“^/([u 0-9a-zA-Z-]+\/)((wp-(admin-activate-blog-header-comments-post-config-cron-links-opml-load-login-mail-settings-signup-trackback))\/.*.php(\/)fcgi://127.0.0.1:9000/var/www/phoenix/$2“enablereuse=on
请更正输入错误