设置具有第三级域的Wordpress网络


11

我一直在研究设置WordPress网络安装。一切都进行得很顺利,直到达到所需的域布局不合适为止。

我想要一个布局如下:

博客。*。stackexchange.com

因此,例如,我想在一个网络中有多个站点,如下所示:

blog.wordpress.stackexchange.com
blog.apple.stackexchange.com
blog。$ site.stackexchange.com

我可以通过一些创造性的重写规则和手动DNS干预来实现此功能,但我希望进行设置,以便将DNS以外的所有内容的创建工作移交给其他人(我们已经有一个自动创建DNS中所需的所有子域)

通过我的玩耍和阅读WP,我确实希望网站成为下一个域名,因此在我上面的示例中,它希望主要的WP博客位于stackexchange.com,而网络博客则位于wordpress.stackexchange.com。

有什么方法可以达到我想要的效果,还是应该走Blog.stackexchange.com/$site的路线?


2
我很确定您将必须使用创造性的重写规则和手动DNS干预。我也很确定这是设计使您无法将DNS以外的所有内容传递给<del>我</ del> <ins>其他人</ ins> ... 吹口哨 </讽刺>(:
丽贝卡·切诺夫

我增加了一笔赏金,希望有人能提供一份循序渐进的指南,以便Zypher可以花更多的时间担心保持SE正常运行,而花更少的时间查找社区博客。
没人

Answers:


3

您可以为此使用Domain Mapper插件。缺点是您必须手动配置每个子博客。


有趣的是,它是重定向还是仅提供内容?我猜我想问的是最终用户的地址栏是否更改?
Zypher

@Zypher不,它只提供内容。
没人

1
使用该插件的教程:ottopress.com/2010/…重要提示:在安装WP并激活该插件以及此导入数据或迁移系统之后,它没有问题。在博客在域映射之前已经存在之后,添加此插件并不是那么容易。它还提供了其他插件,以使wp后端的工作更简单。wordpress.org/extend/plugins/networks-for-wordpress
bueltge 2011年

由于缺乏替代品,因此需要+150 rep。
没人

1

您可以使用自定义的Sunrise.php文件执行此操作。从本质上讲,这就是域映射插件的工作方式,但是它的前端非常漂亮。对于某些定制的东西,您可以编写一些简单的PHP来完成基本上相同的事情。

多站点的本质涉及确定要服务的站点。域映射插件通过创建wp_domain_mapping表并将信息存储在其中来实现此目的。因此,当它收到对xxx.com的请求时,它会在该表中查找并看到与blog_id 123相对应。

首先,进行WordPress设置,并将其设置为多站点。不管它实际生活在哪里,因为我们将改变所有这些。为了简单起见,我将其放在blog.stackexchange.com上并使其成为子目录类型的站点(这样更容易)。创建的子目录可能是子段。/ wordpress,/ apple,/任何。

所以是的,首先,您确实是在blog.stackexchange.com/wordpress上启用了它。考虑这是您的暂存环境。创建每个站点时,您可以在此处进行处理,直到您决定打开映射。

要自己进行域映射,而无需使用插件,您可以执行以下操作:

第一步:添加define( 'SUNRISE', 'on' );到wp-config.php文件的顶部。

第二步:在wp-content目录中创建Sunrise.php文件。首先放在<?php顶部。

第三步:在Sunrise.php文件中,这将是您确定要加载哪个网站的逻辑。

您将基于$_SERVER[ 'HTTP_HOST' ]变量。您如何做到这一点很容易:但是您想这样做。如果您只想编写一个正则表达式来查找'/blog\.(.*)\.stackexchange\.com/',然后在数据库中查找该位,则可以这样做。

由于此处使用的子条目与“子目录”相同,因此不需要单独的表。您可以只在主wp_blogs表中查找所需的站点。类似于以下内容:

$current_blog = $wpdb->get_var( "SELECT blog_id FROM {$wpdb->blogs} WHERE path = '/wordpress/' LIMIT 1" );

拥有$ current_blog之后,您需要以下代码:

$current_blog->domain = $_SERVER[ 'HTTP_HOST' ];
$current_blog->path = '/';
$blog_id = $current_blog->blog_id;
$site_id = $current_blog->site_id;
$current_site = $wpdb->get_row( "SELECT * from {$wpdb->site} WHERE id = '{$current_blog->site_id}' LIMIT 0,1" );
$current_site->blog_id = $current_blog->blog_id;

这预定义了$ current_blog和$ current_site全局变量,而不是让WordPress的MU函数执行此操作。

这足以使站点正常运行(在将您的DNS指向它并整理出虚拟主机内容之后),但是HTML代码中使用的大多数静态URL仍然指向blog.stackexchange.com / wordpress,因为那才是真正的网站。另外,规范URL函数可能不喜欢该URL,并且也会重定向您。

为了解决这些问题,您可能还希望预定义与该站点关联的几个URL。诸如WP_SITEURL和WP_HOME之类的东西。另外,WP_CONTENT_URL,WP_PLUGIN_URL和WPMU_PLUGIN_URL。这应该涵盖大多数情况下的URL调整。

最后,您需要设置“ COOKIE_DOMAIN”。由于您可能希望在整个过程中共享登录名,因此可以将其设置为stackexchange.com,如果您不希望共享登录名,则可以将其设置为更高。

如果您想谈论将普通的stackexchange登录系统集成到WordPress中的问题,我也可以回答有关该问题的信息,但是答案会更加详细。:)

如果您需要更多帮助,请随时给我发送电子邮件。很高兴为您提供帮助:wordpress.org的otto。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.