直接上代码:
在虚拟主机域名根目录下新建.htaccess和index.php
.htaccess代码:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
index.php代码:
<?php
set_time_limit(60);
if( !defined('__DIR__') )
{
define('__DIR__',dirname(__FILE__)) ;
}
$_REQUEST['url'] =gtRootUrl();
//改成网站正式服务器ip
$ip= '127.0.0.1';
$aAccess = curl_init() ;
// --------------------
// set URL and other appropriate options
curl_setopt($aAccess, CURLOPT_URL, $_REQUEST['url']);
curl_setopt($aAccess, CURLOPT_HEADER, true);
curl_setopt($aAccess,
CURLOPT_RETURNTRANSFER, true);
curl_setopt($aAccess,
CURLOPT_FOLLOWLOCATION, false);
curl_setopt($aAccess,
CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($aAccess,
CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($aAccess, CURLOPT_TIMEOUT, 60);
curl_setopt($aAccess,
CURLOPT_BINARYTRANSFER, true);
//curl_setopt($aAccess,
CURLOPT_HTTPPROXYTUNNEL, 0); curl_setopt($aAccess,CURLOPT_PROXY,$ip.':80');
//curl_setopt($aAccess,CURLOPT_PROXY,'127.0.0.1:8888');
if(!empty($_SERVER['HTTP_REFERER']))
curl_setopt($aAccess,CURLOPT_REFERER,$_SERVER['HTTP_REFERER']) ;
$headers=get_client_header();
curl_setopt($aAccess,CURLOPT_HTTPHEADER,$headers) ;
if( $_SERVER['REQUEST_METHOD']=='POST' )
{
curl_setopt($aAccess, CURLOPT_POST, 1);
curl_setopt($aAccess, CURLOPT_POSTFIELDS, http_build_query($_POST));
}
// grab URL and pass it to the browser
$sResponse = curl_exec($aAccess);
list($headerstr,$sResponse)=parseHeader($sResponse);
$headarr= explode("\r\n", $headerstr);
foreach($headarr as $h){
if(strlen($h)>0){
if(strpos($h,'Content-Length')!==false) continue;
if(strpos($h,'Transfer-Encoding')!==false) continue;
if(strpos($h,'Connection')!==false) continue;
if(strpos($h,'HTTP/1.1 100 Continue')!==false) continue;
header($h);
}
}
function replace_html_path($arrMatche)
{
$sPath = makeUrl($arrMatche[4]) ;
if( strtolower($arrMatche[1])=='img' )
{
$sPath.= '&bin=1' ;
}
return "<{$arrMatche[1]} {$arrMatche[2]} {$arrMatche[3]}=\"{$sPath}\"" ;
}
function get_client_header(){
$headers=array();
foreach($_SERVER as $k=>$v){
if(strpos($k,'HTTP_')===0){
$k=strtolower(preg_replace('/^HTTP/', '', $k));
$k=preg_replace_callback('/_\w/','header_callback',$k);
$k=preg_replace('/^_/','',$k);
$k=str_replace('_','-',$k);
if($k=='Host') continue;
$headers[]="$k:$v";
}
}
return $headers;
}
function header_callback($str){
return strtoupper($str[0]);
}
function parseHeader($sResponse){
list($headerstr,$sResponse)=explode("\r\n\r\n",$sResponse, 2);
$ret=array($headerstr,$sResponse);
if(preg_match('/^HTTP\/1\.1 \d{3}/', $sResponse)){
$ret=parseHeader($sResponse);
}
return $ret;
}
function gtRootUrl()
{
//缓存结果,同一个request不重复计算
static $gtrooturl;
if(empty($gtrooturl)){
// Protocol
$protocol = strtolower($_SERVER['SERVER_PROTOCOL']);
$protocol = substr($protocol,0,strpos($protocol,'/')).$s.'://';
// Port
$port = ($_SERVER['SERVER_PORT'] == 80) ? '' : ':'.$_SERVER['SERVER_PORT'];
// Server name
$server_name = isset($_SERVER['SERVER_NAME']) ? $_SERVER['SERVER_NAME'].$port : getenv('SERVER_NAME').$port;
// Host
$host = isset($_SERVER['HTTP_HOST']) ? strtolower($_SERVER['HTTP_HOST']) : $server_name;
$gtrooturl=$protocol.$host.$_SERVER['REQUEST_URI'];
}
return $gtrooturl;
}
// close cURL resource, and free up system resources
curl_close($aAccess);
echo $sResponse ;
注意:
1.index.php中IP地址'127.0.0.1'改为目标主机IP
2.目标主机不要设置强制SSL,否则报错
3.如果站点为Typecho,在config.inc.php文件中添加以下代码:
/** 启用https **/
define('__TYPECHO_SECURE__', true);