Ole*_*mak 9 php apache wordpress
有两个网站,我们称之为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安装所在的同一服务器.此外,以下示例已经直接从我的脑海中拉出来,没有涉及真正的测试或验证,它可能会也可能不会起作用是.)
通常,WordPress与单个主机名/域绑定,可以在其中提供页面和内容.例如,域存储在wp_options siteurl和home行中http://www.example.com.
您可以wp-config.php使用WP_SITEURL和WP_HOMEPHP常量重写此内容.首先,您需要确保将主域(例如maindomain.com)正确设置为wp_options表行siteurl和 home.然后,您需要调整wp-config.php文件以使WP接受任何域,如下所示:
define('WP_SITEURL', 'http://' . $_SERVER['HTTP_HOST']);
define('WP_HOME', 'http://' . $_SERVER['HTTP_HOST']);
Run Code Online (Sandbox Code Playgroud)
(如果需要,请务必在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.
});
Run Code Online (Sandbox Code Playgroud)
将其添加到插件或主题中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]
Run Code Online (Sandbox Code Playgroud)
现在您有一个用户坐在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]
Run Code Online (Sandbox Code Playgroud)
该规则首先检查请求是否违反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';
});
Run Code Online (Sandbox Code Playgroud)
这是一种浅薄的方法,不考虑媒体或用户的行为方式.您需要验证两个域是否允许跨源请求,并且在需要时为正确的跨源会话正确保存用户会话cookie.
我还建议研究如何挂钩媒体上传过程,使两个WP安装使用相同的目录和数据.使用upload_dir过滤器可以获得相同的目录,并且附件的保存方式与帖子类似,因此您可以使用wp_insert_post或类似的方式将上传复制到两个站点.
此外,您可以使用一些wp-config.php技巧将两个WP安装与单个用户表一起使用.
所以,基本上:当用户访问网站的特定部分时 - 让我们说a.com/b,URL应该更改为b.com.
听起来你只需要创建一个文件/控制器/帖子a.com/b,将浏览器重定向到b.com.
最简单的方法是b在根目录中创建一个目录,并将apache默认文件放在那里(index.htm,index.php等),该文件将具有重定向头.
理想的方法是使用301重定向.htaccess.就像是
Redirect 301 /b http://b.com
Run Code Online (Sandbox Code Playgroud)
或使用通配符:
RedirectMatch 301 /b(.*) http://b.com/$1
Run Code Online (Sandbox Code Playgroud)
(网上有大量的htaccess资源)
这是两个极端,中间还有很多其他选项,你应该根据有多少重定向选择最适合你的选项,是否有任何模式,你想能够动态生成它们等等.
您可能遇到的问题(您从未完全描述过这个问题,所以我只是说),以防您想要返回a.com并且无法在b.com上设置类似的重定向.在这种情况下,我建议你简单地在a.com/b上说,同时在iframe中进行b.com渲染.
| 归档时间: |
|
| 查看次数: |
674 次 |
| 最近记录: |