【问题标题】:How to write a php/htaccess script to redirect form variables to another website如何编写 php/htaccess 脚本将表单变量重定向到另一个网站
【发布时间】:2009-09-11 10:26:40
【问题描述】:

嘿,这是我的问题:我做了一个闪光灯,但无论如何我都无法更改它。那个闪存有一个向我的子域发送数据的表单。我必须删除子域并且我有一个新网站,问题是:如何将表单数据从旧站点重定向到新站点? 在闪存中,我让表单将数据发送到:subdomain.site.ro/subscribe.php 我仍然有那个文件,我可以在其中编写一个脚本,但字段名称类似于:field [name],我可以'不处理它们,所以我必须将它们发送到原始脚本女巫现在在另一个站点上:othersite.ro/subscribe.php。

所以基本上我必须编写一个脚本,将 post/get 变量传递给新脚本(在新网站上),或者编写一个 .htaccess 文件,将 post/get 变量重定向到新网站

有人可以帮助我吗?我已经搜索了很长时间,但找不到任何有用的东西 如果您至少尝试提供帮助,我将不胜感激。 谢谢, 丹

好的,现在我可以使用下面的脚本(使用 html 表单)来处理变量。但是闪存没有向脚本发送任何变量。我尝试了很多东西,我还在尝试..有什么想法吗?如果是,请告诉我。 谢谢, 丹

<?php
if(isset($_POST['key']['yourmom'])) 
echo 'Your mom is '.$_POST['key']['yourmom'].' and your face '.$_POST['key']['yourface'];
?>


<form method="post">
<input type="hidden" name="key[yourmom]" value="lol">
<input type="hidden" name="key[yourface]" value="failed">
<input type="submit">
</form>

【问题讨论】:

    标签: php .htaccess forms redirect variables


    【解决方案1】:
    <?php
        header("HTTP/1.1 301 Moved Permanently");
        header("Location: http://othersite.ro/subscribe.php");
        header("Connection: close");
    
        exit;
    ?>
    

    如果这不能满足您的需求,那么您可以尝试通过 curl 充当某种代理:

    <?php
        $ch = curl_init('http://othersite.ro/subscribe.php');
        curl_setopt ($ch, CURLOPT_POST, 1);
        curl_setopt ($ch, CURLOPT_POSTFIELDS, "key1=val1&key2=val2&key3=val3");
        curl_exec ($ch);
        curl_close ($ch);
    ?>
    

    【讨论】:

    • 它仍然无法正常工作,谢谢,如果你有任何想法,我会很高兴
    • 他要求脚本传递所有变量!
    【解决方案2】:

    是的,“Dav”回答正确。

    另外,如果您收到错误消息,指出标头已发送,只需输入“ob_start();”即可就在开头的“

    【讨论】:

    • 我不想要一个正常的重定向..我想将变量从表单传递到另一个网站..重定向很好,但它没有传递变量
    • 好吧,如果其他站点上的脚本不接受获取,那么您将不得不使用 cURL 发布到它。实际上,其他站点上的这个脚本是什么,为什么你不能把它放在你自己的服务器上/重新编码呢?
    • print_r($_POST);这样您就可以看到发生了什么,正如“Dav”所推荐的那样
    【解决方案3】:

    您需要遍历$_POST$_GET 变量(数组)以获取所有变量:

    <?php
        header("HTTP/1.1 301 Moved Permanently");
        $poststring="";
        foreach ($_POST as $variable=>$value)
                {
                $poststring.=$variable."=".$value."&";
                }
        header("Location: http://othersite.ro/subscribe.php?".$poststring);
        header("Connection: close");
    
        exit;
    ?>
    

    GET 变量也是如此(只需以相同的方式使用 $_GET)

    【讨论】:

    • 仍然无法正常工作因为脚本包含名称变量,例如:变量 [名称],并且由于“[]”字段被传输,所以我需要以某种方式重定向表单和变量而不尝试获取他们拥有的值..如果它可以工作,那就太好了..或者如果您知道如何处理具有这些名称的字段,它可以帮助我:变量[名称]例如输入具有名称=“变量[名称] "
    • 你需要对数组变量使用函数序列化" serialize(variable); 然后在接收端做反序列化
    【解决方案4】:
    <?php
    
        if(isset($_POST['key']['yourmom'])) echo 'Your mom is '.$_POST['key']['yourmom'].' and your face '.$_POST['key']['yourface'];
    
    ?>
    
    
    <form method="post">
    <input type="hidden" name="key[yourmom]" value="lol">
    <input type="hidden" name="key[yourface]" value="failed">
    <input type="submit">
    </form>
    

    复制上面的代码并运行它.. 而不是 $_POST['value'] 它只是 $_POST['key']['value']

    就像 相同

    【讨论】:

    • 这与重定向有什么关系?
    • 不是,天才。他正试图用他的脚本做一些忍者嘘!因为他拥有的某些文件位于他无权访问的另一台服务器上 - 我只是在帮助他了解 <input name="key[value]" 的工作原理这样他就可以更有效地解决整体问题。
    • 太棒了,这似乎有效,我现在可以将包含的数据发布到变量中,让我看看我是否可以完成整个事情。但是谢谢我真的需要这个
    • 好的脚本在 html 表单中运行良好,现在我可以处理变量,但 flash 仍然没有传递变量:-?我该怎么办?
    • 像这样设置一个空白的php文件 和另一个分别带有 _GET - 尝试发布到这样的页面,以便您可以查看数据是否实际通过,还要确保您正确使用 getURL 或 as3 等效项。 - 现在如果你试图发布到上面那个确切的脚本,除非有 $_POST['key']['yourmom'] 的值,否则它不会起作用 - 你几乎在那里,只要确保你使用正确的命令在动作脚本中发布或获取信息,你应该很好。
    【解决方案5】:

    正确的做法是更改 DNS 记录,使您的旧子域指向您的新子域。然后一切都被提交到新域,尽管路径相同。但听起来你做不到。

    另一种方法是模拟您的 Flash 应用使用 curl 提交的 POST。只需获取 url 查询字符串 (GETs) 并提交 POST。您的字段名称是否为 $_POST['key']['value'] 并不重要。

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, 'othersite.ro/subscribe.php?'.$_SERVER['QUERY_STRING']);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $_POST);
    curl_setopt($ch, CURLOPT_USERAGENT, 'Redirect Fix');
    $result = curl_exec($ch);
    curl_close($ch);
    

    您甚至可以将 $result 变量返回到您的 Flash 应用程序。然后你只需在中间有一个服务器来回路由数据。您可以删除 CURLOPT_USERAGENT 行,如果您想指定自定义代理,只需使用它,通常这是浏览器标识符字符串。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-28
      相关资源
      最近更新 更多