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>

いくつかの調査の後、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]

ただし、内部サーバーエラーが発生します。

ここで何が間違っていますか?上記の方法でリンク構造を書き換える他の方法はありますか?

4

3 に答える 3

0

書き換えルールでクエリ文字列と照合することはできません。さらに、mod_rewriteはコンテンツを書き換えることができません。コンテンツを動的に書き換えるには、mod_proxy_html のようなある種のリバース プロキシを使用する必要があります。P書き換えエンジンは、サーバーがリクエストを受信したときにのみ適用されるため、リクエストがサーバー (htaccess ファイルを持つサーバー) に到達すると、可能なネストはリダイレクト (またはフラグを使用したリバース プロキシ) になります。

どのルールも 500 内部サーバー エラーを引き起こすべきではありませんが、書き換えルールでクエリ文字列を一致させることができず、ルールにはパターンとターゲットが必要であるため、とにかく機能しません。2 番目のルールには、パターンのないターゲットのみがあります。ほとんどの場合、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 に答える
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 に答える