【问题标题】:How to redirect multiple domains to woocommerce product page dynamically?如何将多个域动态重定向到 woocommerce 产品页面?
【发布时间】:2019-01-25 04:11:46
【问题描述】:

考虑 abc.com 是我使用名称服务器 ns1.testnameserver.comns2.testnameserver.com 的主要网站。

我想重定向多个域如下:

def.com to abc.com/products/def
ghi.com to abc.com/products/ghi
jkl.com to abc.com/products/jkl
mno.com to abc.com/products/mno

我尝试了以下方法:

我为 def.com,ghi.com,jkl.com,mno.com 设置了相同的测试名称服务器。

RewriteCond.htaccess 中尝试了一些组合,但我无法解决。

任何人都指导我进一步前进。

谢谢大家。

注意:

我不能使用域转发/托管所有域,因为它应该是动态的(例如 3500 多个域到 3500 多个产品)

【问题讨论】:

    标签: .htaccess redirect mod-rewrite dns


    【解决方案1】:

    我不确定我是否理解您的问题,但您可以使用以下方式重定向域:

    RewriteEngine on 
    # not for exemple.com
    RewriteCond %{HTTP_HOST} !example\.com$ [NC]
    RewriteCond %{HTTP_HOST} (?:^|\.)([^.]+)\.(?:[^.]+)$
    RewriteRule ^ http://example.com/products/%1%{REQUEST_URI} [NE,L] 
    

    将你所有的 DNS 指向主网站,然后在这个 .htaccess 中更改主域 (example.com) 的名称

    【讨论】:

    • 我在主网站上使用共享主机,所以我应该为所有要转发的域使用相同的域名服务器吗?!
    • 是的,你可以!但最重要的是它们都指向同一个地方。
    • .net、.org、.co 域怎么办?下面的代码就够了吗? RewriteCond %{HTTP_HOST} !example\.net$ [NC] RewriteCond %{HTTP_HOST} !example\.org$ [NC] RewriteCond %{HTTP_HOST} !example\.co$ [NC]
    • 没有。您可以使用:RewriteCond %{HTTP_HOST} !example\.(?:com|net|org|co)$ [NC]
    • 不带重定向
    【解决方案2】:

    您可以使用以下步骤实现此目的 -

    1. 您需要为每个具有指向 abc.com IP 地址的 A 记录条目的域设置区域文件。

    2. 在 abc.com 网络服务器上,您可以使用您选择的任何语言编写脚本,该脚本将读取主机并适当地重定向到您需要的任何位置。

    或者,您也可以从 .htacess 执行此操作,但由于您拥有大量域,所以我建议使用任何语言(php、python 等)的脚本

    【讨论】:

    • 现场示例:Efty.com 使用 ns1.efty.com 和 ns2.efty.com。所有使用这些名称服务器的域都会动态地转发到它自己的产品页面。 Movingup.com 和 seodirector.com 正在使用这些域名服务器。
    • 您也可以使用名称服务器来实现此目的,但为此您需要设置自己的名称服务器,例如绑定等,并且必须相应地对名称服务器进行编程。仅设置转发 dns 是不够的。
    【解决方案3】:

    您可以使用RewriteMap 指令完全满足您的需求。

    首先将您的映射放在一个文件中,例如/var/lib/domains.txt包含

    def.com     http://example.net/products/def
    ghi.com     http://example.net/products/ghi
    jkl.com     http://example.net/products/jkl
    mno.com     http://example.net/products/mno
    

    然后您在服务器或虚拟主机 .conf -file 中设置以下规则(您不能在 .htaccess 文件中执行此操作):

    RewriteEngine On
    
    RewriteMap      lowercase       int:tolower
    RewriteMap      custdomains     txt:/var/lib/domains.txt
    
    # rewrite matching domain to desired URL
    RewriteCond     ${lowercase:%{HTTP_HOST}}       ^(?:www\.)?(.+)
    RewriteCond     ${custdomains:%1}               ^(.+)$
    RewriteRule     ^/(.*)$                         %1              [R=301,L,NE]
    
    # unmatched domains are passed unchanged
    RewriteRule     .                               -               [R,NE,L]
    

    RewriteCond -rules 将捕获 HTTP_HOST 标头,其中包含用户正在浏览的目标域的主机名。如果该主机名与您的文本文件中定义的映射匹配,则浏览器将被重定向到匹配的 URL。

    通过此设置,您可以将所有数千个域指向同一台服务器,然后该服务器根据外部文件中的映射执行适当的重定向(您可以在不重新启动 apache 的情况下进行更新)。为了获得更好的性能,您应该真正使用外部 DBM 哈希文件(有关详细信息,请参阅RewriteMap 的文档)。

    【讨论】:

      猜你喜欢
      • 2018-10-07
      • 1970-01-01
      • 2023-01-22
      • 2016-03-15
      • 2021-02-14
      • 2018-03-31
      • 2018-11-21
      • 2022-01-22
      • 1970-01-01
      相关资源
      最近更新 更多