0

有很多问题讨论重写 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>

经过一些研究,我认为重写模块可以解决问题。我试图将下面的代码放在我的 .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]

但是,它给了我内部服务器错误。

我在这里做错了什么?有没有其他方法可以按照上面描述的方式重写链接结构?

4

3 回答 3

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>
于 2013-05-01T16:26:12.230 回答
0

您无法匹配重写规则中的查询字符串。此外,mod_rewrite不能重写您的内容。您需要使用某种反向代理,例如 mod_proxy_html 来动态重写您的内容。重写引擎仅在服务器收到请求时应用,因此您可以做的嵌套是P在请求到达您的服务器(具有 htaccess 文件的服务器)后重定向(或使用标志的反向代理)。

您拥有的任何规则都不应该导致 500 内部服务器错误,但它们无论如何都不会起作用,因为您无法匹配重写规则中的查询字符串,此外,规则需要模式和目标。您的第二条规则只有一个没有模式的目标。最有可能的是,未加载 mod_rewrite 会导致 500 内部服务器错误。除此之外,请检查您的错误日志。

Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteRule ^index1\.php http://remotesite/index1.php [L,QSA,P]
于 2013-05-01T16:41:32.357 回答
0

经过 6 个多小时的研究,我设法通过 mod_rewrite 方法以外的方式解决了这个问题,这里是详细信息

诀窍很简单,我只是从获取文件内容方法更改为 curl 有更多选项

下面是我使用的代码:

<?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 的帮助

于 2013-05-02T02:56:56.973 回答