簡體   English   中英

PHP的卷曲跟隨重定向?

[英]php curl follow redirects?

我有一個旨在接收來自其他服務器的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中做到這一點嗎? 因此,我不必為此創建單獨的文件嗎?

默認情況下,Curl不遵循重定向。

如果從命令行運行curl,則需要在命令中添加-L標志,以使其遵循重定向。

如果要通過庫調用curl,則需要將FOLLOWLOCATION curl選項設置為true(或1),執行此操作的確切代碼取決於您使用的語言/庫/包裝器。

首先,我認為您的代碼存在一些問題,因為您正在將這些變量設置為isset()的結果,即true或false。 另外,在以后添加該字符串時將其設置為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不支持相對URL,我需要指定完整的URL。

是的,您可以在文件/intercept/.htaccess中使用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]否則請指定完整的URL,然后使用[R]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM