【问题标题】:How to hide actual link but not alert the affiliate that the link came from a redirected link?如何隐藏实际链接但不提醒会员该链接来自重定向链接?
【发布时间】:2014-09-27 11:04:32
【问题描述】:

到目前为止,我已经尝试了一个简单的页面,该页面使用 id (domain.com/link/1234/) 进行 301 php 重定向。然后我尝试了相同的 php 重定向(转发 id)到一个 php 页面,使用 id 来设置 uri 使用 JavaScript 重定向(使用 onload 重定向)。

如果我只是单击链接,一切正常。但是重定向从附属公司收到 404。关于如何实现这一点的任何想法?

我想让我的所有链接都使用帖子的 ID。

示例:domain.com/link/1234/

而不是附属链接:affiliate.com/sniper.php?s=g&7=8&g=0

编辑

所以如果我在头部使用这个 JavaScript,它会完美重定向。

<script>
    var url = "http://affiliate.com/sniper.php?s=g&7=8&g=0";

    // IE8 and lower fix
    if (navigator.userAgent.match(/MSIE\s(?!9.0)/))
    {
        var referLink = document.createElement("a");
        referLink.href = url;
        document.body.appendChild(referLink);
        referLink.click();
    }

    // All other browsers
    else { window.location.replace(url); }
</script>

但如果我将 PHP 添加到 JavaScript 中以动态添加 URL。例如:

<script>

    var url = "<?php echo $url_to_affiliate_website; ?>";

    // IE8 and lower fix
    if (navigator.userAgent.match(/MSIE\s(?!9.0)/))
    {
        var referLink = document.createElement("a");
        referLink.href = url;
        document.body.appendChild(referLink);
        referLink.click();
    }

    // All other browsers
    else { window.location.replace(url); }
</script>

这失败了,我不知道为什么。 PHP 可以在这个页面上,但不能在 script 标签之后。

有什么想法吗??

【问题讨论】:

  • navigator.userAgent.match(/MSIE\s(?!9.0)/) 在 IE 10 及更高版本中也将返回 true。
  • 能否请您粘贴由 PHP 生成的最终 HTML 代码?我怀疑您是在纯 HTML 文件上使用它,并且该文件没有被 PHP 解析。我想我们可以通过浏览器查看源代码,从您最终的 HTML 代码中找到问题。
  • 您的说法不明确.. URL 是描述中所述的唯一 PHP。我从 mariaDB 复制并粘贴以确保 URL 相同,甚至使用 if 语句来确保 URL 从 DB 中打印相同。
  • 在设置 url 变量后尝试添加 console.log(url); 并检查您的控制台以查看 url 是否按预期传递

标签: javascript php redirect


【解决方案1】:

如果您有将 /link/{number}/ 重写为 link.php?id={number}

的重定向规则
<?php
//link.php

//Consider sanitize the input. (if it's number, use (int) casting for instance)
$linkid = $_GET['id'];

/*
 Get the affiliate url based on the link ID.
 If you're using DB or whatever.
*/
$url = get_affiliate_url($linkid);

header("Location: ".$url);
?>
  • 没有测试。

【讨论】:

  • 感谢您的尝试。正如我上面所说,这是我尝试的第一种方法。我不确定另一端如何知道它来自重定向 - 但他们知道。其他想法?
  • 我想到的另一个选择是使用Domain Masking,我不喜欢这种方法,我不知道它是否适合你的情况。
【解决方案2】:

这是您使用的代码吗?我想知道你将如何在 js 函数中使用 php 变量。

相反,您应该将 php 变量回显为 php。

前:

<script type="text/javascript">

        var url = "<?php echo $url_to_affiliate_website; ?>";

        // IE8 and lower fix
        if (navigator.userAgent.match(/MSIE\s(?!9.0)/))
        {
            var referLink = document.createElement("a");
            referLink.href = url;
            document.body.appendChild(referLink);
            referLink.click();
        }

        // All other browsers
        else { window.location.replace(url); }
    </script>

除非我误解了您的要求,否则我认为这会对您有所帮助。

【讨论】:

  • 我的错误。在尝试了几种方法之后,我最后一次尝试是回显所有的 JS 以及 PHP 变量(因为那里的混乱而抱歉)。所以,确实我已经尝试回应您在上面所写的内容,但关联公司(多个)仍然知道他们的链接没有被点击(我假设),所以我收到了 404 而不是预期的报价。为清楚起见,我正在编辑上面的代码以反映回声。谢谢。
  • 没关系......那么你的意思是“所以如果我在头部使用这个 JavaScript,它会完美重定向。”??您是否告诉过您是否对链接进行了硬编码。如果您动态生成,它就不起作用?
  • 补充一点:我已经尝试了所有我知道的方法来单独使用 PHP。没有 PHP 的 JS 是我唯一的成功。
  • 我看不出动态无法正确重定向的原因,因为最终硬编码文本和动态 url 在 js 函数中被视为相同。
  • 你检查过硬编码文本和你的动态文本是否相同吗?我的意思是动态生成链接时可能缺少任何参数...我不确定...
【解决方案3】:

这是您尝试在 JavaScript 中嵌入 PHP 变量的方式。您必须这样做:

<?php
echo '<script type="text/javascript">
    var url = "' . $url_to_affiliate_website . '";
    ...
    </script>';
?>

或者这个:

// jump to the verbatim mode, aka not interpreted by the PHP parser
?>
<script type="text/javascript">
var url = "<?php echo $url_to_affiliate_website; ?>";
</script>
<?php // continue rest of the PHP code

【讨论】:

  • 请参阅我对 user3571366 答案的评论。我已经尝试了两种方式。谢谢你的回答。
  • 糟糕,答案与我的几乎相同。我怎么没看到。 ://
【解决方案4】:

编辑

我刚刚重新阅读了您的帖子;我不确定该 JavaScript 是否实际上嵌入到您的文档或外部文件中,但如果它被嵌入,则执行重定向的文件将需要称为“index.php”而不是“index.html”以便要评估的 PHP。同样,如果 JavaScript 在外部文件中,则 JavaScript 文件而不是 HTML 文件将需要“.php”扩展名并包含在页面中,如下所示:

<script src="./javascript-file.php"></script>

对于知道页面被重定向的目标页面,他们可能会检查 HTTP 标头并看到该页面是从您的页面永久重定向的 301。您可以在重定向到附属公司之前阻止/删除这些标头。我需要看到更多你们的代码才能提供帮助。

既然你说 PHP 不能在 script 标签之后,我假设这是托管环境的限制。这是一个可能适合您的解决方案:

<div id="concealed" style="display:none;"><?php echo $url_to_affiliate_website; ?></div>

<script>
    var url = document.getElementById("concealed").innerHTML;

    // IE8 and lower fix
    if (navigator.userAgent.match(/MSIE\s(?!9.0)/))
    {
        var referLink = document.createElement("a");
        referLink.href = url;
        document.body.appendChild(referLink);
        referLink.click();
    }

    // All other browsers
    else { window.location.replace(url); }
</script>

【讨论】:

    【解决方案5】:
    <?php
    $url_to_affiliate_website = "http://affiliate.com/sniper.php?s=g&7=8&g=0"; 
    ?>
    

    你确定你给 $url_to_affiliate_website 的价值是你想要的 url 吗? 也尝试以这种方式重写您的代码。并改用 window.location

    // IE8 and lower fix
    if (navigator.userAgent.match(/MSIE\s(?!9.0)/))
    {
        var referLink = document.createElement("a");
        referLink.href = "<?=$url_to_affiliate_website;?>"; // note the = after ?
        document.body.appendChild(referLink);
        referLink.click();
    }
    
    // All other browsers
    else { 
    window.location = url;
    }
    

    还要确保在回显之前声明了 $url_to_affiliate_website。并确认您的文件是否具有 .php 扩展名而不是 .html

    将文件保存为 UTF-8,如果您使用 Notepad++,请单击编码->在 UTF8 中编码,然后保存文件并退出。

    【讨论】:

      猜你喜欢
      • 2011-10-04
      • 1970-01-01
      • 2018-09-02
      • 2013-10-31
      • 1970-01-01
      • 2022-07-29
      • 1970-01-01
      • 1970-01-01
      • 2022-01-26
      相关资源
      最近更新 更多