-1

次のように、アップロードされた写真のディレクトリが日付でソートされています。

http://mysite.com/uploads/2012-12-08/abcd.png

そしてindex.php/uploads/フォルダー内に.htaccess

を使用しindex.phpて画像を制御できますwidth&height

元の URL は次のようになります。http://mysite.com/uploads/?url=2012-12-08/abcd.png&width=128

.htaccessコードは次のとおりです。

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteRule ^(.*) /uploads/index.php?url=$1 [QSA]
</IfModule>

URLを入力http://mysite.com/uploads/2012-12-08/abcd.png&width=128すると、サイズ変更された画像が表示されます

しかし、問題はブラウザが画像拡張子を次のように表示することですpng&width=128

また、一部のフォーラムでは画像の URL を表示できません。これは、& 記号が原因です。

.png&width=128に変更するにはどうすればよいですか.png?width=128?

クエリ文字列が 2 つ以上あります

最大 : ?url=$&width=$&height=$&rotate=$&filter=$&

私は次のルールを試しました:

RewriteCond %{QUERY_STRING} (.+)
RewriteRule ^(.*)$ /uploads/index.php?url=$1&%1 [QSA]

しかし、httpエラー500を表示します

私は多くのルールを試しましたが、誰も機能しません..

助けてください!

4

1 に答える 1

1

これは、URL を別のパターンに変更するという問題ではありません。あなたは間違ったアプローチをしています。最近のブラウザーは、ダウンロードしたオブジェクトを保存するときにファイル名を提案します。そのファイル名の提案は、ダウンロードが要求されたときに配信サーバーによって指定されたヘッダーに基づいています。ヘッダーには、ブラウザに送信される実際のコンテンツが何であるかを説明する追加のメタ情報が含まれています。

url パターンは、受信したヘッダーから使用可能な情報を抽出できない場合に、ブラウザーがファイル名を提案するためにのみ使用されます。

したがって、適切なヘッダーを送信すると、すべてのブラウザーが提案された名前を使用します。グーグルで検索すると、これに関する多くのエントリがあります。開始点として、実際の画像を送信する前にindex.php スクリプトでこれを使用します。

<?php
// the mime type of the object, replace 'image/png' dynamically as required
header('Content-Type: image/png');
// the suggested file name, obviously you can dynamically replace 'image.png'
header('Content-Disposition: Attachment;filename=image.png'); 
// NOW send the content (the image)
?>

代わりに、別の配置を使用できます。「添付ファイル」は画像のダウンロードを強制し、「インライン」はダウンロードではなくインライン表示を提案します。これは、オブジェクトの MIME タイプが実際にインラインで表示できる場合にのみ機能します。

<?php
// the mime type of the object, replace 'image/png' dynamically as required
header('Content-Type: image/png');
// the suggested file name, obviously you can dynamically replace 'image.png'
header('Content-Disposition: inline;filename=image.png'); 
// NOW send the content (the image)
?>

何をするにしても、それがどのように機能するか、どのようなオプションと代替手段があるかについて読むことは確かに理にかなっています. これが、何が起こっているのかを実際に理解する唯一の方法であり、コードを実装する際に最も重要なことの 1 つです。phps header()関数について読むことから始めることをお勧めします。

于 2012-12-09T10:47:02.813 に答える