php curl关注重定向?

时间:2010-11-29 00:11:26

标签: php .htaccess mod-rewrite curl redirect

我有一个页面,用于接收来自其他服务器的curl请求。

我需要将此curl请求格式化为另一种格式。

所以我有这段代码

<?php
$id =     (isset($_GET['msgid'])    ? $_GET['msgid']   : 'null');
$from =   (isset($_GET['from'])     ? $_GET['from']    : 'null');
$body =   (isset($_GET['content'])  ? $_GET['content'] : 'null');
$status = (isset($_GET['status'])   ? $_GET['status']  : 'null');

header("location: ../action/receive_message/$id/$from/$body/$status");
?>

所以,如果有人要发送卷曲请求到 http://example.com/intercept/test.php?id=123&from=me&body=something;

那会打电话吗 http://example.com/action/123/me/something/null

或者如果没有,我有办法可以得到它吗?

另一个是。

有没有办法可以在.htaccess中执行此操作? 所以我不必为此创建一个单独的文件?

2 个答案:

答案 0 :(得分:1)

默认情况下,Curl不会遵循重定向。

如果您从命令行运行curl,则需要在命令中添加-L标志,以使其遵循重定向。

如果您通过库调用curl,则需要将FOLLOWLOCATION curl选项设置为true(或1),并且执行该操作的确切代码将取决于您的语言/库/包装器重新使用。

答案 1 :(得分:0)

首先,我认为您的代码存在一些问题,因为您将这些变量设置为isset()的结果,这是真或假。此外,如果您希望单词null显示为使用'null',则在以后包含该字符串时为该字符串设置null是一个错误的计划,如果没有,则使用空字符串。

应该是:

$id =     (isset($_GET['msgid'])    ? $_GET['msgid']   : '');
$from =   (isset($_GET['from'])     ? $_GET['from']    : '');
$body =   (isset($_GET['content'])  ? $_GET['content'] : '');
$status = (isset($_GET['status'])   ? $_GET['status']  : '');

Location标题会告诉curl重定向,如果在调用时给出-L选项,则会执行curl。请注意,Location不支持相对网址,您需要指定我认为的完整网址。

是的,您可以使用文件mod_rewrite中的/intercept/.htaccess来执行此操作,只要查询字符串的顺序正确并且所有值都存在,就可以处理随机顺序或缺少条目,但更复杂。

RewriteEngine on
RewriteBase /intercept/

# Note, & may need escaping, can not recall
RewriteCond %{QUERY_STRING} ^id=([^&]+)&from=([^&]+)&content=([^&]+)&status=([^&]+)$
RewriteRule test.php /action/%1/%2/%3/%4 [L]

如果在同一网站上,您可以使用[L],否则请指定完整网址,然后使用[R]