讨论重写mod问题有很多问题。我读过它们,没有人解决我的独特问题。我已经做了3个小时的研究来解决它,但我仍然陷入困境。
我想通过file_get_contents()
PHP函数重写从远程站点检索到的源代码中的链接。
当我获得源代码时,链接结构是:
<a href='javascript:openWindow("index1.php?option=com_lsh&view=lsh&event_id=148730&tv_id=850&tid=34143&channel=0&tmpl=component&layout=popup&Itemid=335","735","770")' >Link#1</a>
我想将其重写为:
<a href='javascript:openWindow("http://remotesite.com/index1.php?option=com_lsh&view=lsh&event_id=148730&tv_id=850&tid=34143&channel=0&tmpl=component&layout=popup&Itemid=335","735","770")' >Link#1</a>
经过一番研究后,我认为重写mod可以解决问题。我试着将下面的代码放在我的.htaccess文件中:
Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteRule ^index1\.php?option - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule http://remotesite/index1.php?option [L]
然而,它给我内部服务器错误。
我在这里做错了什么?是否有其他方法以上述方式重写链接结构?
答案 0 :(得分:0)
试试这个:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.example\.com [NC]
RewriteCond %{HTTP_HOST} !^$
RewriteRule ^/(.*) http://www.example.com/$1 [L,R]
</IfModule>
答案 1 :(得分:0)
您无法在重写规则中与查询字符串进行匹配。此外,mod_rewrite 无法重写您的内容。您需要使用某种反向代理,如mod_proxy_html,以便动态重写您的内容。重写引擎仅在服务器收到请求时应用,因此一旦请求到达您的服务器(具有htaccess文件的服务器),您可以执行的嵌套是重定向(或使用P
标志反向代理)
您所拥有的任何规则都不会导致500内部服务器错误,但它们无法正常工作,因为您无法在重写规则中匹配查询字符串,此外,规则需要模式和目标。你的第二条规则只有一个没有模式的目标。最有可能的是,未加载mod_rewrite会导致500内部服务器错误。除此之外,请检查您的错误日志。
Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteRule ^index1\.php http://remotesite/index1.php [L,QSA,P]
答案 2 :(得分:0)
经过6个多小时的研究,我设法通过mod_rewrite方法以外的方式解决了这个问题,这里是详细信息
诀窍很简单我刚从get file content方法更改为curl with more options
下面是我使用的代码:
<?php
//Get the url
$url = "http://remotesite.com";
//Get the html of url
function get_data($url)
{
$ch = curl_init();
$timeout = 5;
//$userAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US)AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.X.Y.Z Safari/525.13.";
$userAgent = "IE 7 – Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30)";
curl_setopt($ch, CURLOPT_USERAGENT, $userAgent);
curl_setopt($ch, CURLOPT_FAILONERROR, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_AUTOREFERER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,$timeout);
$data = curl_exec($ch);
curl_close($ch);
return $data;
}
$html = file_get_contents($url);
echo '<base href="http://remotesite.com/" />';
echo $html;
?>
将每条相对路径更改为绝对路径的技巧如下:
echo '<base href="http://remotesite.com/" />';
感谢@Jon lin,@ ahmed求助