0

私はリダイレクターを持っていました。これは、URL の / の後のすべてをパラメーターとして非表示の index.php に渡しました (その後、js の window.location を使用してユーザーを後で別のドメインにリダイレクトします。ホストは .htaccess による外部リダイレクトをサポートしていません)。 )、しかし、コードを紛失しました。各ファイル (index.php、.htaccess) は /storage フォルダーにあります。
.htaccess は次のようなものでしたが、わかりません。

RewriteRule ^(.*) /?$1 [R,L]

これは、リダイレクトの無限ループを作成しています。

入力http://storage.mysite.com/file.pngすると開くように機能しましhttp://storage.mysite.com/?file.pngた。
これでリダイレクトされるため、.htaccessでindex.phpを直接呼び出すのを避けようとしました:

<?php 
   echo "
       <script>
        window.location='http://otherdomain.com/12345678".$_SERVER['REQUEST_URI']."'
       </script> 
   "; // note there's no slash after the number, the REQUEST_URI had it
?>

これを行う適切な方法は何ですか?

4

2 に答える 2

1

これが必要なもののように聞こえます:

RewriteCond %{REQUEST_URI} !^/index.php
RewriteRule ^(.*)$ index.php

PHP では、$_SERVER['REQUEST_URI']依然として元の要求された URI になり/file.pngます。

R フラグを取り除くと、ループが修正されます。さらに、以下で説明するように、リクエスト URI を GET パラメータとして追加する必要はありません。
R フラグは、新しいアドレス/?file.pngがブラウザーに送信され、ブラウザーがその URI に対して新しい要求を行うことを意味します。
R フラグを削除すると、Apache はindex.phpブラウザに通知せずに新しいファイルを提供することになります。

これは、index.phpが解析されていますが、リクエスト URI がまだ であることを意味します/file.png

RewriteCond %{REQUEST_URI} !^/index.phpは、リクエストが に対するもの/index.phpである場合、書き換えられないことを意味します。

私はこれをテストしましたが、動作します。問題がある場合は、コメントしてください。

于 2013-06-28T16:55:08.430 に答える
0

*「0以上」という意味です。少なくとも 1 つある場合にのみリダイレクトする場合は、+代わりに使用する必要があります。

于 2013-06-28T16:34:58.683 に答える