如何在不同的子域上运行 Wordpress 管理员?

Posted

技术标签:

【中文标题】如何在不同的子域上运行 Wordpress 管理员?【英文标题】:How to run Wordpress admin on a different subdomain? 【发布时间】:2011-03-23 00:11:11 【问题描述】:

我需要通过 https 运行 Wordpress 管理员。 我们使用 CDN 为站点提供缓存内容,但 CDN 不能接受安全流量(每个 IP 只允许一个 SSL 证书,我们在其上运行多个站点)。我无法控制 httpS://www.mysite.com/. 的重定向

我想要:

http://www.mysite.com/blog/
httpS://secure.mysite.com/blog/wp-admin/
httpS://secure.mysite.com/blog/wp-login.php

我已尝试按照文章http://codex.wordpress.org/Administration_Over_SSL#Virtual_Hosts 中的建议重写网址。

假设您可以使用具有不同名称的主机,例如 wpadmin.mysite.com

不幸的是,按照建议尝试这个仍然会将我发送到httpS://www.mysite.com/blog/login.php

# No matter what it redirects to the wrong subdomain for login.php
http://www.mysite.com/blog/wp-admin/
-> httpS://secure.mysite.com/blog/wp-admin/
-> httpS://www.mysite.com/blog/wp-login.php.

另外,当直接访问 css 文件时,仍然链接到错误的 url (.)

简单的解决方案是从http://blog.mysite.com/blog/ 运行博客。不幸的是,出于 SEO 的原因,已经尝试过并决定反对。

Wordpress 是否可以做到这一点?

【问题讨论】:

如果我没记错的话,WP 有一个 db 条目,它命名管理面板所在的域,当您登录并转到管理面板时,它会将您重定向到该域。运行测试实例时,让它们保持正常可能会很痛苦。 【参考方案1】:

不太确定您是否看过这篇文章,但它非常全面地介绍了基于 SSL 的 Wordpress Admin。向下滚动到关于虚拟主机的部分,那里有关于将 wp-admin 设置为子域的信息。

http://codex.wordpress.org/Administration_Over_SSL

【讨论】:

是的 - 我试过了。我已经更新了问题以反映我在 login.php 中遇到的问题。【参考方案2】:

如果您使用 Apache 通过 SSL 提供服务,请查看 mod_proxy。

使用它,您可以透明地将所有请求从https://secure.mysite.com/blog/ 重定向到http://www.mysite.com/blog/

【讨论】:

我已经在运行 mod_proxy 并且正在这样做。不幸的是,wordpress 强制将网址设为https://www.mysite.com/ 检查ProxyPreserveHost 指令。你需要打开它。之后,您需要将 ServerAlias secure.mysite.com 添加到 WP vhost 配置中。作为最后的手段,你可以破解 WP 来做你需要的事情。谷歌搜索揭示了一些 HOWTO。【参考方案3】:

插件http://wordpress.org/extend/plugins/admin-ssl-secure-admin/ 正是我所追求的。

不幸的是,它在较新的 Wordpress 版本上被破坏了:(

【讨论】:

【参考方案4】:

你看过this thread吗?它是WordPress HTTPS 插件上的一个模组。

【讨论】:

今天有时间试试这个插件,它(wordpress-https v2.0.4 for wordpress v3.3.1)完全符合我的要求!感谢您查看旧线程。【参考方案5】:

使用纯 Apache 配置启用 http://blog.example.com 到 https://ssl.example.com/wp-admins/blog/wp-login.php 的管理员访问权限,这样您就无需依赖 Wordpress 插件和您可能想要的更新...

...在 HTTPS apache 虚拟主机上使用 mod_proxy 来转发流量,确保 ProxyPreserveHost 处于关闭状态,以便将代理语句中的主机名发送到 wordpress 服务器。然后使用 mod_substitute(确保打开它)来修复从 wordpress 返回的断开的链接。

<Location /wp-admins/blog/>

  AddOutputFilterByType SUBSTITUTE text/html
  AddOutputFilterByType SUBSTITUTE text/css
  AddOutputFilterByType SUBSTITUTE application/javascript
  AddOutputFilterByType SUBSTITUTE application/json
  Substitute "s|http://blog.example.com|https://ssl.example.com/wp-admins/blog|i"
  Substitute "s|blog.example.com\\\/|blog.example.com\\/wp-admins\\/blog\\/|i"
  Substitute "s|'/wp-admin|'/wp-admins/blog/wp-admin|i"
  Substitute "s|\"/wp-admin|\"/wp-admins/blog/wp-admin|i"
  Substitute "s|'/wp-includes|'/wp-admins/blog/wp-includes|i"
  ProxyPassReverseCookiePath / /wp-admins/blog/

</Location>

ProxyPass /wp-admins/blog/ http://blog.example.com/
ProxyPassReverse /wp-admins/blog/ http://blog.example.com/

要使反向代理正常工作,您需要指定托管 blog.example.com 的服务器的内部 IP。即使上游服务器 (10.0.0.4) 有多个基于名称的虚拟主机,此解决方案也能确保它能够正常工作。

10.0.0.4 blog.example.com

更多详情见:

http://tec.libertar.se/how-to-host-wordpress-admin-on-a-seperate-domain-and-subfolder/

【讨论】:

以上是关于如何在不同的子域上运行 Wordpress 管理员?的主要内容,如果未能解决你的问题,请参考以下文章

Nginx - 将 Wordpress 作为子域运行,另一个应用程序在主域上运行

如何将我的 wordpress 博客集成到我的子域中?

从 wordpress 触发 laravel 事件

wordpress.com 和其他类似服务如何立即创建子域,即立即可用?

如何部署林根域子域和域

根目录中的 Wordpress htaccess 覆盖子域中的 htaccess。子域应用程序现在无法运行