Tôi có quy tắc mod_rewrite
sẽ gửi bất kỳ yêu cầu miền phụ nào đến tập lệnh php cần ủy quyền các yêu cầu đó tới máy chủ khác (proxy nội bộ, chứ không phải 302).PHP: Proxy một url khác
Tôi gần, trong đó kịch bản của tôi làm việc với các trình duyệt web, nhưng curl dường như không thích nó:
curl: (56) Received problem 2 in the chunky parser
Đây là mod_rewrite của tôi:
RewriteCond %{HTTP_HOST} ^(.*)\.example\.com$
RewriteRule ^.*$ %{DOCUMENT_ROOT}/proxy.php?__path=%1 [QSA,L]
Và tôi proxy.php
<?php
$name = $_GET['__path'];
unset($_GET['__path']);
$path = $_SERVER['REQUEST_URI'];
$url = "http://$name.internal.example.com$path";
$ch = curl_init($url);
$headers = array();
foreach (apache_request_headers() as $key => $value) {
$headers[] = "$key: $value";
}
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $_SERVER['REQUEST_METHOD']);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($_POST));
curl_setopt($ch, CURLOPT_HEADER, TRUE);
$data = curl_exec($ch);
list($headers, $body) = explode("\r\n\r\n", $data, 2);
$headers = explode("\r\n", $headers);
foreach ($headers as $header) {
header($header);
}
die($body);
Bất kỳ lý do gì khiến curl không thích điều này nhưng các trình duyệt đều ổn với nó?
EDIT: Dường như nếu tôi không gửi tiêu đề Transfer-Encoding: chunked
, mọi thứ đều ổn (vì tôi đang ủy quyền yêu cầu đầy đủ, không thể chunking). Vì vậy, một câu hỏi tiếp theo: Tôi có thể hoạt động như một người trung gian thực sự và gửi dữ liệu khi tôi nhận được nó qua ổ cắm?