htaccess を使用して、すべての画像を showimage.php にリダイレクトしたいと思います。
しかし、次のようなことを試してみると
RewriteRule ^images/([A-Za-z1-9]+).png$ showimage.php?image=$1 [L]
そのページに表示される画像もリダイレクトされます(doh)
showimage.phpからリクエストされた場合ではなく、すべての画像をリダイレクトする方法は? (またはこのサーバーから)
htaccess を使用して、すべての画像を showimage.php にリダイレクトしたいと思います。
しかし、次のようなことを試してみると
RewriteRule ^images/([A-Za-z1-9]+).png$ showimage.php?image=$1 [L]
そのページに表示される画像もリダイレクトされます(doh)
showimage.phpからリクエストされた場合ではなく、すべての画像をリダイレクトする方法は? (またはこのサーバーから)
できることは 2 つあります。
1- クエリがサーバーから送信された場合はリダイレクトしない RewriteRule の前に RewriteCond ディレクティブを追加するだけで済みます。これは、http クエリのソースがこのサーバーである場合、次の RewriteRule を実行しないことを示しています。
RewriteCond %{REMOTE_ADDR} !127.0.0.1
スクリプトが取得する方法によっては、代わりにサーバーのプライベート IP を使用する必要がある場合があります。または、この IP で別の RewriteCond を追加して、両方がリダイレクトされないようにします。
2-クエリのリファラーに応じてリダイレクトを防ぐこともできますが、クエリとともに送信されることを確認する必要があります。(referer は、URL を要求したソース URL です。たとえば、http://localhost/index.phpにいて、 http://localhost/help.phpへのリンクをクリックすると、最後のリンクのリファラーがhttp://localhost/index.php ) 。RewriteCond を引き続き使用しますが、REMOTEHOST の代わりに HTTP_REFERER を使用します。
例えば:
RewriteCond %{HTTP_REFERER} !showimage.php
RewriteCond %{HTTP_REFERER} !/images/.*\.png
これで十分な場合はユーザーではなく、完全なリファラーを少しいじる必要があるかもしれませんが、最初のアイデアだけです。アクセスログでどのリファラーを持っているかを確認できます (使用する LogFormat で %{Referer}i が有効になっている場合)
わかりました: 問題は、REFERER が要求された URL であり、書き換えられた URL ではないことです (考えてみれば明らかです)。したがって、問題は、 http://localhost/images/x.pngが必要な場合、http://localhost/showimage.php?image=x.pngとして書き換えられ、内部のページを提供することです。ただし、リファラーは showimage.php ではなく .../images/x.png (初期 URL) です。したがって、HTTP_REFERER の RewriteCond は、元の URL が /images/*.png のようなものであることを確認する必要があります。
これが私の作業例です。ルールは [DOCROOT]/.htaccess ファイルにあります。
RewriteEngine on
RewriteCond %{HTTP_REFERER} !/images/.*\.png
RewriteRule ^images/([A-Za-z1-9-]+).png$ image.php?name=$1 [L]
これが私のimage.phpファイルです:
<html>
Here it is : <img src="/images/<?php echo $_GET['name']; ?>.png"/>
</html>
私のブラウザで http://[server ip]/images/foo.png を呼び出すと、「Here it is : 」という単語と、[DOCROOT]/images/foo.png から取得した要求された画像を含む HTML ページが表示されます。 .
「このサーバーからではない」を機能させるには、RewriteRule の前に REMOTE_ADDR に関する以前の RewriteCond を追加するだけです ([OR] を指定しない場合、それらは AND 条件として機能します - rewriterule は両方の条件が true の場合にのみトリガーされます -このサーバーやphpスクリプトからではありません)