domain.com/user/upload/12345.jpg
リンクを からに書き換えようとして
domain.com/12345.jpg
いますが、ファイル拡張子がjpg
、gif
またはpng
. 私は、それは次のようになるべきだと思います:
RewriteRule ^user/upload/$ /$1 [L, QSA]
しかし、私のバージョンは動作しません。どうすれば修正できますか?
domain.com/user/upload/12345.jpg
リンクを からに書き換えようとして
domain.com/12345.jpg
いますが、ファイル拡張子がjpg
、gif
またはpng
. 私は、それは次のようになるべきだと思います:
RewriteRule ^user/upload/$ /$1 [L, QSA]
しかし、私のバージョンは動作しません。どうすれば修正できますか?
あなたの実際のパスはユーザー/アップロードであり、ルートディレクトリのようにしたいと思います(私には理にかなっています)。それ以外の場合は、パスを変更してください。
これでうまくいくと思います。
RewriteRule ^([^\.]+)\.(jpg|gif|png)$ http://domain.com/user/upload/$1.$2 [NC,L]
または、これも:
RewriteRule ^(.+?)\.(jpg|gif|png)$ http://domain.com/user/upload/$1.$2 [NC,L]
QSA を渡すためのクエリ文字列がありません (たとえば?id=5&name=myname
、? の後の はクエリ文字列です)。
編集:
リモート リダイレクトの書き換え URL を保持したい場合は、すべての一致を次のようなローカル ファイルにリダイレクトすることをお勧めします: remoteimage.php:
RewriteRule ^(.+?).(jpg|gif|png)$ remoteimage.php?filename=$1&extension=$2 [NC,L]
このファイルは画像を読み取り、ブラウザに再送信します...
何かのようなもの:
<?php
// Remote image
$filename = $_GET['filename'];
$ext = $_GET['extension']; // Of course you will need some validations, etc.
header('Content-type: image/' . ($ext != 'jpg' ? $ext : 'jpeg'));
// This is the idea, you could use cURL, fopen, etc. and you probably need to validate response status code and received data
$image = file_get_contens("http://domain.com/user/upload/{$filename}.{$extension}");
echo $image;
?>
codeigniter や kohana などのフレームワークを使用している場合は、読み取りをキャッチする必要がある場合があります。
これを試すことができます:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} /([^/]+)\.(jpg|jpeg|gif|png)$
RewriteRule .* http://domain.com/user/upload/%1.%2 [L]
これをマップします:
http://domain.com/any_name.any_extension
これに:
http://domain.com/user/upload/any_name.any_extension
オプション
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (/m)?/([^/]+)\.(jpg|jpeg|gif|png)$
RewriteRule .* http://domain.com/user/upload%1/%2.%3
これをマップします:
http://domain.com/any_name.any_extension
またはこれ
http://domain.com/m/any_name.any_extension
これに:
http://domain.com/user/upload/any_name.any_extension
またはこれ
http://domain.com/user/upload/m/any_name.any_extension
/m
サブディレクトリの存在に応じて。