我有一个页面,用于接收来自其他服务器的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中执行此操作? 所以我不必为此创建一个单独的文件?
答案 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]
。