首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Apache2.4+ FPM + Wordpress Multisite: URL重写不适用于管理员

Apache2.4+ FPM + Wordpress Multisite: URL重写不适用于管理员
EN

Stack Overflow用户
提问于 2016-01-09 20:36:43
回答 3查看 2.1K关注 0票数 1

我刚刚将Wordpress多站点从Apache2.4Pre叉+ mod_php移到了一个新服务器上,使用Apache2.4事件+php。

该网站在前端运行良好,它比以前快得多,因为CGI,但是.Wordpress管理面板只为主站点(和网络管理)工作。第二个站点的管理区域不再工作,但是前端工作非常好。

示例

  • http://www.example.com/en/wp-admin/ =>工作
  • http://www.example.com/en/wp-admin/post-new.php =>继续错误404

我试图调试重写,但我拥有的唯一日志(也使用debug级别8)是

代码语言:javascript
复制
[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/

跟我的配置一样。任何帮助都很感激。谢谢。

虚拟主机

代码语言:javascript
复制
<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

代码语言:javascript
复制
<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
EN

回答 3

Stack Overflow用户

发布于 2016-09-28 03:50:05

不知道你是否找到了解决办法。我只想分享我们对这个问题的解决方案。

我们刚刚将下面的行添加到apache配置中。这将对regex中的所有项目进行转发到FPM。

代码语言:javascript
复制
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
票数 3
EN

Stack Overflow用户

发布于 2017-12-05 14:00:27

我添加了一个不同的解决方案,因为@parpar's one虽然对我有用,但它继续抛出proxy_fcgi错误:

代码语言:javascript
复制
[proxy_fcgi:error] Got error 'Primary script unknown\n'

解决方案包括删除调用PHP的ProxyPassMatch方式,并在Directory环境中包括一个管理PHP调用的处理程序:

代码语言:javascript
复制
<Directory "/path/to/host/root">
   # rest of configuration...
   <FilesMatch \.php$>
      SetHandler "proxy:unix:/path/to/socket.sock|fcgi://localhost"
   </FilesMatch>
</Directory>
票数 3
EN

Stack Overflow用户

发布于 2021-05-10 07:09:30

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

对于每一个也在努力解决这个问题的人来说,我发现以下的资源是有帮助的,但是他们并没有为我开箱即用:

代码语言:javascript
复制
- [https://cwiki.apache.org/confluence/display/httpd/PHP-FPM](https://cwiki.apache.org/confluence/display/httpd/PHP-FPM)
- [https://cwiki.apache.org/confluence/display/HTTPD/PHPFPMWordpress](https://cwiki.apache.org/confluence/display/HTTPD/PHPFPMWordpress)

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

代码语言:javascript
复制
...
    <FilesMatch "\.php$">
        <If "-f %{REQUEST_FILENAME}">
            SetHandler "proxy:unix:/run/php/php7.4-fpm.sock|fcgi://localhost/"
        </If>
    </FilesMatch>
...

通过这种配置,apache能够识别Wordpress、.htaccess,从而适用于多站点路由的重写规则。由于if语句,只有现有的php文件被传递给php。

到目前为止,main和/en/路由对前端和管理页面都进行了正确的解析。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34698636

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档