2016-05-29 7 views
0

私はurl shortnerを使用しており、htaccessでリダイレクトしたいと考えています。しかし私は、私はむしろ、Apacheが書き換えここjpg/png/gifのhtacessはuriに基づいてmimeを知らずに

www.site.com/s/sdfa5qT3z
www.site.com私が持っているものの例のハンドルでしょう、PHPと同様の効果を達成することができています/ M/sdfa5qT3z
www.site.com/l/sdfa5qT3z
など
www.site.com/public/images/small/sdfa5qT3z.jpg
www.site.comにリダイレクトする必要があり

/public/images/medium/sdfa5qT3z.jpg
www.site.com/public/images/large/sdfa5qT3z.jpg
それぞれ

すべての画像がこれをの.jpgしている場合は、しかし、私は、.JPGの混在している.pngをして、全く問題ありません。 GIF

問題は、私は元のURLに基​​づいて、MIME /タイプが前

をリダイレクトするか分からないです私は.JPGを追加する場合
ファイルが存在するかどうかをテストするために実行できるルールのルールやシリーズがあります
.pngが存在するかどうかテストしない場合
最終的に.gifが存在する場合はとなります。

私たちはこれまでどおり、後続のルールの書き換えと停止をパスします。これらすべては、その後、失敗した場合は404

は事前

答えて

0

このような何か:

RewriteEngine on 
RewriteRule ^s/ - [E=size:small] 
RewriteRule ^m/ - [E=size:medium] 
RewriteRule ^l/ - [E=size:large] 
RewriteRule ^(s|m|l)/([a-zA-Z0-9]+)$ - [E=image_url:$2] 

RewriteCond %{DOCUMENT_ROOT}/public/images/%{ENV:size}/%{ENV:image_url}.jpg -f 
RewriteRule ^(s|m|l)/([a-zA-Z0-9]+)$ /public/images/%{ENV:size}/%{ENV:image_url}.jpg 

RewriteCond %{DOCUMENT_ROOT}/public/images/%{ENV:size}/%{ENV:image_url}.png -f 
RewriteRule ^(s|m|l)/([a-zA-Z0-9]+)$ /public/images/%{ENV:size}/%{ENV:image_url}.png 

RewriteCond %{DOCUMENT_ROOT}/public/images/%{ENV:size}/%{ENV:image_url}.gif -f 
RewriteRule ^(s|m|l)/([a-zA-Z0-9]+)$ /public/images/%{ENV:size}/%{ENV:image_url}.gif 
+0

魅力のように動作します。ありがとう – bri

0

でお願いします。こののみ.htaccessに行うことができるが、私はそれが退屈で反復的なことだと思います。リクエストURIをチェックする方が良いでしょう。一致する場合は、イメージが存在するかどうかを判断できるPHPファイルに送信してください。

ここでは例です:

ドキュメントルート.htaccess

RewriteEngine On 
RewriteRule ^([sml])/(\w+)/?$ image-redirect.php?size=$1&code=$2 [L] 

ドキュメントルートimage-redirect.php:おそらく

<?php 

// Set the valid sizes 
$validSizes = [ 
    's' => 'small', 
    'm' => 'medium', 
    'l' => 'large', 
]; 

// Set the valid extensions 
$validExtensions = 'jpg|png|gif'; 

// Get query string data 
$size = $validSizes[$_GET['size']]; 
$code = $_GET['code']; 

// Loop through each extension to check if the file exists 
foreach (explode('|', $validExtensions) as $extension) { 
    // Set the file name relative to this file 
    $currentFile = "public/images/$size/$code.$extension"; 

    if (file_exists($currentFile)) { 
     // If it exists, redirect with 302 status code. 
     // To make permanent, use header("Location: /$currentFile", true, 301); instead. 
     header("Location: /$currentFile"); 
    } 
} 

// If it doesn't exist, say so with a 404 HTTP header. 
header("HTTP/1.0 404 Not Found"); 
print "File does not exist."; 
関連する問題