web-dev-qa-db-ja.com

ディレクトリ内のすべてのファイルをPNGとして扱う必要があることをディレクトリに伝えるにはどうすればよいですか?

たとえば、「5021.png」ではなく「5021」という名前のPNGがあり、一部の画像では正常で通常の画像のように表示されますが、他の画像は自動的にダウンロードされます。誰かから、返信を止めた人に、.htaccessにルールを追加して、ファイルをすべて画像として表示し、ダウンロードしないようにすることができると言われました。

画像はhttps://i.domain.com/<number> ex https://i.domain.com/5021の形式で表示されます

これをどのように行うのですか、これを行う別の/より良い方法がありますか?

4
Skylark

実際にはいくつかの方法がありますので、選んでください...

何もしないことを含む方法を使用できます...

現在、ほとんどのブラウザはファイル拡張子なしでコンテンツタイプを確立できます。最初の数バイトをダウンロードしてタイプを検出し、すぐに処理します。ただし、完璧な方法ではありません。

JavaScriptを使用してファイル拡張子をローカルで削除する

<img src="your-image-without-extension">を使用して画像を使用して埋め込むことができるように、実際にページ上のimgまたは拡張子を削除する場合は、以下の方法が便利です。ただし、このJavaScriptを使用したページのみが機能するため、別のサイトで使用する場合はそれほど便利ではありません。

$(document).ready(function (){
    var regex = new RegExp("(.jpg|.png)$", "i");
    var image = $("img").each(function (){
        var src = $(this).attr('src');
        if( src.search(regex) == -1){
            var index = src.lastIndexOf('.') < 0 ? src.length:src.lastIndexOf('.');
            $(this).attr('src',src.substring(0, index) + ".jpg");
        }
    });
});

.htaccessを使用した拡張機能の書き換え

.htaccessを使用すると、画像ファイルを含めないようにURLを書き換えることができます。次のようなものを使用すると、ジョブを実行できます。

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.png [NC,L]

このメソッドを使用すると、PNGの有無にかかわらずURLを使用できます。ローカルおよび外部。この利点は、画像ファイルの名前変更に時間を費やす必要がないことです。

htaccessによるContent-Type MIMEの設定

Httpd.confまたはhtaccessファイルを使用して、ページコンテンツタイプを次のように設定できます。

.htaccess(画像フォルダにコピー)

ForceType image/png

またはhttpd.confファイルで使用できる場合、

<Directory /path-to-images>
    ForceType image/png
</Directory>

mod_negotiationによるコンテンツネゴシエーション

コンテンツネゴシエーションとは

コンテンツネゴシエーションは、ApacheおよびIISの使用頻度の低い機能であり、同じリソースの最適なバリアントをブラウザーに透過的に配信します。ブラウザはサーバーに好みを伝え、サーバーは応答を調整して最適なリソースを選択します。さまざまな言語、ファイルタイプ、コンテンツエンコーディング、および文字セットは、ヘッダーリクエストで送信されたブラウザー提供の設定に基づいて、さまざまなブラウザーに自動的に配信できます。コンテンツネゴシエーションで次のディメンションを変更できます。

Media type
Language
Content encoding
Charset

mod_negotiationとのコンテンツネゴシエーション を使用することを選択できます。これは、最適なフォーマットであると判断するものをネゴシエートします。たとえば、jpg、gif、およびpngファイルがある場合ファイル拡張子に追加せずに使用します。

3
Simon Hayter