通过引荐来自一个域的所有子域重定向用户

时间:2015-05-23 06:11:09

标签: php apache .htaccess mod-rewrite redirect

我想弄明白这是可能的。

我有两个文件:main1.html和main2.html

默认情况下,我将用户发送到main1.html,但是来自特定网站的特定用户(我检查这些用户的推荐信息)会发送到main2.html。

不幸的是,其中一个特定网站正在将数百个不同子域的用户作为推荐人发送。

在正常情况下,我使用.htaccess:

RewriteEngine On
RewriteCond %{HTTP_REFERER} .*xxx.org.*$ [OR]
RewriteCond %{HTTP_REFERER} .*yyy.org.*$ [OR]
RewriteCond %{HTTP_REFERER} .*zzz.com.*$ [OR]
RewriteCond %{HTTP_REFERER} .*aaa.net.*$
RewriteRule ^(.*)$ http://your_site/different_page/

或PHP

$refs = array("http://referer1.com","http://referer2.com");
  if (in_array($_SERVER['HTTP_REFERER'],$refs)) {
      header("location: http://redirected_here.com");
  }

但是添加手动这些子域是不可能的。

我有办法从所有子域重定向用户,而无需手动将这些子域添加到.htaccess吗?

1 个答案:

答案 0 :(得分:1)

您可以通过从引荐来源网址中提取“主机”位并从左侧比较来检查引荐来源网址是否是所定义域名的子域名:

// Define the domain list. Redirect if user is from one of these domains
$domains = Array('example.com', 'another.com');

// Extract the 'host' component of the referrer URL
$url_info = parse_url($_SERVER['HTTP_REFERER']);

if (isset($url_info['host'])) {
    foreach($domains as $domain) {
        // Match the referrer from the left side to check if referrer is subdomain 
        if (substr($url_info['host'], -strlen($domain)) == $domain) {
            header("location: http://redirected_here.com");
        }
    }
}