有两个网站,我们称之为 a.com 和 b.com ;直到现在他们已经完全分开了。然而,有协同作用,因此客户希望将b.com作为a.com的一部分(相同的媒体库,用户,主机,数据库等)......但是有了这个...自己的域名和设计。 网站内的网站,拥有自己的域名。
所以,基本上:当用户访问网站的特定部分时 - 让我们说a.com/b,网址应该更改为b.com。
我认为我可以用apache虚拟主机解决这个问题;我发现这个如何使用Yii: Assign different domain for two controllers only
但是我使用Wordpress(已经成为主站点),所以我应该选择vanilla PHP和Apache调整。欢迎任何提示和指示。
请注意:这与多站点无关,因为这会使公共媒体库和用户等的好处失效。
答案 0 :(得分:8)
如果您想使用单个WordPress安装,您要么想要使用域映射插件运行WordPress Multisite(您似乎不想这样做),或者让WordPress接受任何请求主机名(域)来运行在每个域上有条件地提供和提供内容。
(以下假设您同时控制example.com
和secondary.com
,并且它们都指向WordPress安装所在的同一服务器。此外,以下示例已直接从我的头部拉出来涉及的实际测试或验证,它可能会或可能不会按原样运行。)
通常,WordPress与单个主机名/域绑定,可以在其中提供页面和内容。例如,域wp_options
存储在siteurl
home
和http://www.example.com
行中。
您可以使用wp-config.php
和WP_SITEURL
PHP常量在WP_HOME
中覆盖此内容。首先,您需要确保将主域(例如maindomain.com)正确设置为wp_options
表行siteurl
和home
。然后,您需要调整wp-config.php
文件以使WP接受任何域:
define('WP_SITEURL', 'http://' . $_SERVER['HTTP_HOST']);
define('WP_HOME', 'http://' . $_SERVER['HTTP_HOST']);
(如果需要,请务必在HTTP和HTTPS之间进行调整。
现在,当域指向服务器时,WP安装应该可以正常打开。您可以拥有任意数量的域,并且在访问时它们都会加载WP。
您可以使用.htaccess或WP代码进行重定向。如果重定向是应用程序/站点特定的,并且应该可以在任何地方使用,请尝试使用WP代码,因为这更可能在源代码回购等中使用。
add_action('template_redirect', function () {
$isMainDomain = strpos($_SERVER['REQUEST_URI'], 'example.com') !== false;
// We are on primary domain and on domain.com/b
if ($isMainDomain && is_page('b')) {
wp_redirect('http://secondary.com');
exit;
}
// You need to validate child pages too and redirect where needed.
});
将其添加到插件或主题functions.php
。现在,当有人访问主域中的b
页面时,他们将被重定向到secondarydomain.com
。
要使用.htaccess实现此目的,您可以尝试以下
RewriteEngine on
RewriteBase /
// Redirect page `b` and all child pages to other domain.
RewriteCond %{HTTP_HOST} example.com$
RewriteRule ^b/(.*)$ http://www.secondary.com/$1 [L,QSA,R=301]
现在您有一位用户坐在http://www.secondary.com
,但是用户看到了WP安装的首页,而不是页面b
的内容。
使用.htaccess重写,您可以将这些域请求代理到某个"子目录"如果你需要。
RewriteEngine on
RewriteBase /
# Something like the following should hide the `b` page/dir from requests.
RewriteCond %{HTTP_HOST} secondary.com$
RewriteRule ^(.*)$ http://www.secondary.com/b/$1 [L,QSA]
该规则首先检查请求是否针对secondary.com
域名。如果是,服务器会重写对WordPress页面b
及其子页面的所有请求。
现在当有人打开http://www.secondary.com
时,它应该映射到http://www.secondary.com/b
并显示该页面。
(注意:我没有测试上述规则,因此它可能会或可能不会按原样运行。
现在您对页面b
的永久链接存在问题。获取固定链接会返回http://www.example.com/b
,而应返回http://www.secondary.com
。
为固定链接添加过滤器应解决该问题:
add_filter('post_link', function ($link, $post) {
if (is_admin()) {
// Don't change in admin, or editing pages may break
return $link;
}
// Check here that if the $post is either page `b`
// or a child of that page
// then return the proper link instead.
return 'http://www.secondary.com/foo/bar';
});
这是一种浅薄的方法,不考虑媒体或用户的行为方式。您需要验证两个域是否允许跨源请求,并且在需要时为跨源会话正确保存用户会话cookie。
我还建议研究如何挂钩媒体上传过程,使两个WP安装使用相同的目录和数据。使用upload_dir
过滤器可以获得相同的目录,并且附件的保存方式与帖子类似,因此您可以使用wp_insert_post
或类似的I假设将上传内容复制到两个网站。
此外,您可以使用一些wp-config.php
技巧使用单个用户表的两个WP安装。
答案 1 :(得分:5)
所以,基本上:当用户访问网站的特定部分时 - 让我们说a.com/b,网址应该更改为b.com。
听起来你只需要在a.com/b
创建一个文件/控制器/帖子,它会将浏览器重定向到b.com
。
最简单的方法是在根目录中创建一个名为b
的目录,并将apache默认文件放在那里(index.htm,index.php等),该文件将具有重定向头
理想的方法是使用.htaccess
进行301重定向。像
Redirect 301 /b http://b.com
或使用通配符:
RedirectMatch 301 /b(.*) http://b.com/$1
(网上有大量的htaccess资源)
这是两个极端,中间还有很多其他选项,您应根据有多少重定向选择最适合您的选项,是否有任何模式,您是否希望能够生成它们动态等等。
您可能遇到的问题(您从未完全描述过这个问题,所以我只是说),以防您想要返回a.com并且无法设置类似的重定向在b.com上。在这种情况下,我建议您在a / b中在iframe中进行b.com渲染时简单地说。
答案 2 :(得分:0)
如果你不想搞乱wp过滤器或你的htaccess规则
您只需在名为/ b /的目录中创建index.html
即可
或创建一个带有值为'b'a.com/b
的slug的页面,其代码为plain html
<script>top.location='http://b.com'</script>
答案 3 :(得分:0)
只需在b.com底部添加©通知,使其成为a.com的一部分(或者只添加“此网站是a.com的一部分”或类似内容)。如果您想将a.com链接到b.com,请添加类似的链接
&lt; a href =“b.com”&gt; b.com&lt; / a&gt;
。如果您想在a.com中使用域名,那么只需从a.com/b重定向到b.com ...