如何编写php / htaccess脚本将表单变量重定向到另一个网站

时间:2009-09-11 10:26:41

标签: php .htaccess forms redirect variables

嘿,这是我的问题:我做了一个闪光,我不能改变它没有什么。那个flash有一个将数据发送到我的子域的表单..我不得不删除子域,我有一个新的网站,问题是这样的:我如何将表单数据从旧站点重定向到新站点? 在flash我有表格发送数据到:subdomain.site.ro/subscribe.php我仍然有那个文件,我可以写一个脚本,但字段名称是这样的:字段[名称],我可以处理它们所以我必须将它们发送到原始脚本中,现在它位于另一个站点上:othersite.ro/subscribe.php。

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

有人能帮助我吗?我一直在寻找很长一段时间,我找不到任何有用的东西 如果你至少试着提供帮助,我将不胜感激。 谢谢, 丹

确定现在我可以使用下面的脚本(使用html表单)处理变量。但是flash并没有向脚本发送任何变量。我尝试了很多东西,我还在努力......任何想法?如果是,请告诉我。 谢谢, 丹

<?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>

5 个答案:

答案 0 :(得分: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);
?>

答案 1 :(得分:0)

是的“戴维”回答说得对。

另外,如果你收到错误说已经发送了标题,只需输入“ob_start();”在开头“&lt;?php”下 - 也就是说,如果你计划将这个膝盖放在另一个PHP脚本中。

答案 2 :(得分:0)

你需要遍历$_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)

答案 3 :(得分:0)

<?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']

所以喜欢&lt; input name ='something'= $ _POST ['something'] 与&lt; input name ='key [bla]'= $ _POST ['key'] ['bla']

相同

答案 4 :(得分:0)

正确的方法是更改​​DNS记录,以便旧的子域指向新的子域。然后,所有内容都会被提交到新域,尽管路径相同。但听起来你不能这样做。

另一种方法是模拟您的Flash应用使用curl提交的POST。只需获取url查询字符串(GET)并提交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行,如果要指定自定义代理,只需使用它,通常这是浏览器标识符字符串。