我试图在NGINX上安装一个多站点子目录,WordPress core在它自己的子目录中,但遇到了一些麻烦。
我正在使用此文件结构:
/home/site/dev.site.com/current/public/ --- path to webroot
/home/site/dev.site.com/current/public/wp/ --- path to WP root
/home/site/dev.site.com/current/public/wp/wp-admin/ --- path to WP admin root
我想要的URL结构是:
dev.site.com/wp-admin/network/ --- network admin
dev.site.com/ --- root site
dev.site.com/wp-admin/ --- root site admin
dev.site.com/[sitename] --- additional sites
dev.site.com/[sitename]/wp-admin --- additional site admin
我的NGINX多站点重写包括:
rewrite ^/([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) /wp/$2 last;
rewrite ^/([_0-9a-zA-Z-]+/)?(.*\\.php)$ /wp/$2 last;
我的完整NGINX配置是
here.
目前,我can 访问网络管理员(位于dev.site.com/wp-admin/network/
), 根站点(位于dev.site.com
), 和根站点管理仪表板(位于dev.site.com/wp-admin/
).
当我尝试访问任何其他网站时(dev.site.com/[sitename]
) 我得到404(由WordPress处理)。当我尝试访问他们的管理面板时(dev.site.com/[sitename]/wp-admin/
) 我获得根站点的管理仪表板(位于包含[sitename]
).
我有点困惑,为什么这不起作用-一切似乎都是正确的,但很明显我缺少了一些基本的东西。我的假设是,这与我的nginx配置有关,但我不完全确定。
有没有人有过这种配置的经验?非常感谢您的帮助!
EDIT: 我已经检查了我的重写日志,nginx似乎正确地处理了重写,并传递了正确的GET URL和all:
2014/09/22 10:38:35 [notice] 4857#0: *54 rewritten data: "/wp/wp-admin/index.php", args: "", client: 127.0.0.1, server: dev.site.com, request: "GET /subsite/wp-admin/ HTTP/1.1", host: "dev.site.com", referrer: "http://dev.site.com/wp/wp-admin/"
出于某种原因,WP admin没有发现请求是针对子网站的,而只是返回站点根目录。。。
EDIT 2: 我设置了一个mu插件get_admin_url()
, WordPress显然认为它与它实际返回的URL位于不同的位置。当我击中dev.site.com/subsite/wp-admin/
, get_admin_url()
退货http://dev.site.com/wp-admin/
, 根站点管理员的路径。情节变厚了。。。
EDIT 3: (很抱歉进行了所有编辑。)我可以通过编写一个钩住init
和运行switch_to_blog( $id )
, 但这显然是一个残酷的解决方案。WordPress应该知道要加载哪个博客,然后加载它,天哪。