Apache 2.4 + FPM + Wordpress Multisite:URL重写不在admin中

时间:2016-01-09 20:36:43

标签: wordpress apache .htaccess mod-rewrite

我刚刚将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

3 个答案:

答案 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 服务器时,我遇到了完全相同的问题,因此找到了这篇文章。

对于每个也在为此苦苦挣扎的人,我发现以下资源很有帮助,但它们并不适合我:

我最终在迁移页面的虚拟主机中使用了以下 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/ 路由都可以正确解析前端和管理页面。