php – 网站部分的不同域名
有两个网站,我们称之为a.com和b.com;直到现在他们已经完全分开了.但是,存在“协同作用”,因此客户希望使b.com成为a.com的一部分(相同的媒体库,用户,主机,数据库等)……但是它拥有自己的域和设计.站点内的站点,具有自己的域.
所以,基本上:当用户访问网站的特定部分时 – 让我们说a.com/b,URL应该更改为b.com. 我想我可以用apache虚拟主机解决这个问题;我发现这个如何使用Yii: 但我正在使用Wordpress(已经成为主要网站),所以我应该使用vanilla PHP和Apache调整.欢迎任何提示和指示. 请注意:这不是关于多站点,因为这将使公共媒体库和用户等的好处无效.
如果您想使用单个WordPress安装,您要么想要使用域映射插件运行WordPress Multisite(您似乎不想这样做),或者让WordPress接受任何请求主机名(域)来操作和服务有条件地在每个域上的内容.
(以下假设您同时控制example.com和secondary.com,并且它们都指向WordPress安装所在的同一服务器.此外,以下示例直接从我的脑海中提取,没有涉及真正的测试或验证,它可能会也可能不会按原样运作.) 让WP为请求接受多个主机名 通常,WordPress与单个主机名/域绑定,可以在其中提供页面和内容.例如,域存储在wp_options siteurl和home行中,如http://www.example.com. 您可以使用WP_SITEURL和WP_HOME PHP常量在wp-config.php中覆盖它.首先,您需要确保将主域(例如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] 从WP中的页面中删除页面slug 现在您有一位用户坐在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 presme将上传内容复制到两个站点. 此外,您可以使用一些wp-config.php技巧将两个WP安装与单个用户表一起使用. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |