如何实现域名转发避免循环重定向?WordPress场景技术咨询
针对你描述的收购跳转需求,这里提供两种可行的实现方案,核心思路是用Cookie标记用户是否已查看过收购说明页,仅对首次访问(无标记)的用户执行重定向,避免循环问题。
方案一:Apache .htaccess 配置(适合服务器端直接控制)
1. domainA 的 .htaccess 规则
在domainA根目录的.htaccess文件中添加以下规则,仅当用户未持有visited_acquisition Cookie时,重定向到domainB的收购说明页:
RewriteEngine On # 排除设置Cookie的专用路径,防止循环 RewriteCond %{REQUEST_URI} !^/set-cookie/?$ # 检查请求中是否不存在目标Cookie RewriteCond %{HTTP_COOKIE} !visited_acquisition=1 [NC] # 重定向到domainB的收购说明页,携带来源标记(可选) RewriteRule ^(.*)$ https://newdomainB.com/acquisition-page?from=domainA [R=302,L]
2. domainA 创建Cookie设置页面
在domainA根目录创建set-cookie.php文件(如果是WordPress,也可以用自定义页面模板替代),内容如下:
<?php // 设置有效期为1天的Cookie,覆盖domainA全站 setcookie('visited_acquisition', '1', time() + 86400, '/', '.domainA.com', false, true); // 设置完成后跳回domainA首页 header('Location: https://domainA.com/'); exit; ?>
3. domainB 收购说明页修改
在domainB的收购说明页中,添加一个隐藏iframe用于自动设置domainA的Cookie,同时放置返回原站点的链接:
<!-- 隐藏iframe自动设置Cookie --> <iframe src="https://domainA.com/set-cookie/" style="display: none; width: 0; height: 0;"></iframe> <!-- 返回原站点链接 --> <a href="https://domainA.com/">返回 Company A 原站点</a>
用户打开收购说明页时,iframe会悄悄加载domainA的Cookie设置页面,完成标记;之后返回domainA时,.htaccess检测到Cookie就不会再触发重定向。
方案二:WordPress 代码实现(无需修改服务器配置)
如果不想改动.htaccess,可以直接在domainA的WordPress主题functions.php中添加代码逻辑:
1. domainA 主题 functions.php 代码
// 处理首次访问重定向 add_action('template_redirect', 'acquisition_redirect_check'); function acquisition_redirect_check() { // 排除Cookie设置页面 if (is_page('set-cookie')) return; // 无Cookie则重定向到收购说明页 if (!isset($_COOKIE['visited_acquisition'])) { wp_redirect('https://newdomainB.com/acquisition-page?from=domainA', 302); exit; } } // 处理Cookie设置 add_action('template_redirect', 'set_acquisition_visitor_cookie'); function set_acquisition_visitor_cookie() { if (is_page('set-cookie')) { // 设置全站生效的Cookie,有效期1天 setcookie('visited_acquisition', '1', time() + 86400, '/', '.domainA.com', false, true); wp_redirect(home_url('/')); exit; } }
然后在WordPress后台创建一个名为set-cookie的空白页面(无需填写内容),用于触发Cookie设置逻辑。
2. domainB 收购说明页修改
和方案一一致,添加隐藏iframe和返回链接即可。
关键注意事项
- Cookie的
domain参数要匹配domainA的主域,比如domainA是www.domainA.com,则设为.domainA.com确保子域名也能识别;如果是顶级域名直接用domainA.com。 - 使用302临时重定向,避免搜索引擎永久缓存重定向规则,收购完成后可轻松移除。
- 若用户禁用Cookie,首次跳转后返回仍会触发重定向,这种极端情况可通过URL参数作为备选(比如返回链接改为
domainA.com/?skip_redirect=1,然后在代码中检测参数并设置Cookie)。
内容的提问来源于stack exchange,提问作者rudtek
相关产品推荐
相关产品推荐

