如何在不同的子域上运行 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 作为子域运行,另一个应用程序在主域上运行