我刚刚将Apache 2.4 Prefork + mod_php中的Wordpress多站点移动到Apache 2.4 Event + php-fpm的新服务器。
该网站在前端运行良好,由于CGI,它比之前快得多,但是...... Wordpress管理面板仅适用于主站点(和网络管理)。 第二个站点的管理区域不再有效,但前端运行良好。
实施例
我尝试调试重写,但我拥有的唯一日志(也使用调试级别8)是
[proxy_fcgi:error] [pid 13700:tid 140381047965440] [client X.X.X.X:54354] AH01071: Got error 'Primary script unknown\n', referer: http://www.example.com/en/wp-admin/
完成我的配置。 任何帮助赞赏。谢谢。
虚拟主机
<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>
的.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
答案 0 :(得分: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
答案 1 :(得分:2)
我添加了一个不同的解决方案,因为@parpar's one虽然它对我有用,却会继续抛出for (int i = 0; i <= dtExceldata.Rows.Count - 1; i++)
{
if (!String.IsNullOrEmpty(Convert.ToString(dtExceldata.Rows[i]["fieldvalues"])))
{
//assign value to variable
//like below
//string ex_uid = dtExceldata.Rows[i]["columnName"];
//then insert operation here
}
}
个错误:
proxy_fcgi
解决方案包括删除ProxyPassMatch方法来调用PHP FPM并包含一个处理程序来管理进入[proxy_fcgi:error] Got error 'Primary script unknown\n'
环境的PHP调用:
Directory
答案 2 :(得分:0)
当我将 WordPress 多站点从本地 XAMPP 安装移动到带有 Apache 2.4.29 和 php-fpm 的 Ubuntu 18.04 服务器时,我遇到了完全相同的问题,因此找到了这篇文章。
对于每个也在为此苦苦挣扎的人,我发现以下资源很有帮助,但它们并不适合我:
同样的问题,不同的解决方法,但对我来说开箱即用:https://serverfault.com/questions/450628/apache-2-4-php-fpm-proxypassmatch
关于 php-fpm 的 Apache Doc 包含有用和解释的示例,甚至是 Wordpress 的示例(但没有特定于多站点的内容):
我最终在迁移页面的虚拟主机中使用了以下 Apache 配置,而不是使用 ProxyPassMatch
:
...
<FilesMatch "\.php$">
<If "-f %{REQUEST_FILENAME}">
SetHandler "proxy:unix:/run/php/php7.4-fpm.sock|fcgi://localhost/"
</If>
</FilesMatch>
...
使用此配置,WordPress 多站点 .htaccess 被 apache 识别,因此应用了多站点路由的重写规则。由于 if 语句,只有现有的 php 文件被传递给 php-fpm。
到目前为止,main 和 /en/
路由都可以正确解析前端和管理页面。