2009-07-14 5 views
2

私は、mod_rewriteを使用してアバター画像のリクエストを処理したいと思います。 私はすべての.pngイメージを含むフォルダを持っていて、そのファイルの名前はアカウントのユーザー名の名前になります。mod_rewrite、avatarセットアップ

/avatar/Juddlingの画像を表示するようにお願いします。/images/avatars/Juddling.pngこのファイルが存在しない場合は、default.pngの画像を表示したいと思います。

Options +FollowSymLinks 
Options +Indexes 
Options -MultiViews 
RewriteEngine On 

RewriteRule ^avatar/(.*)$ images/avatars/$1.png [NC] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^avatar/(.*)$ images/avatars/default.png [NC,L] 

Apacheは唯一のアバターがデフォルトの画像を見るのではなく、存在しない場合、私は404を得ているように、第1 RewriteRuleを処理しているようです。

答えて

0
Options +FollowSymLinks 
Options -MultiViews 

RewriteEngine On 

RewriteCond %{DOCUMENT_ROOT}/images/avatars/$1.png -f 
RewriteRule ^avatar/(.*[^/])?$ /images/avatars/$1.png [L] 
RewriteRule ^avatar/(.*[^/])?$ /images/avatars/default.png [L] 

このコードは機能します!私は本当に正規表現についての手がかりを持っていたことはありませんが、それは "(。* [^ /])でしたか?"問題を引き起こしていた部分、私はそれが何を意味するのかは分かりませんが、問題は解決しました!

あなたの助けを借りてくれてありがとう!

+0

なぜ '(。* [^ /])? 'を使用しますか? '/ avatar /'の後の部分を空にする理由は? – Gumbo

+0

私は表現が何を恐れるのか分かりません。別の例からコピーしました。しかし、ちょうど(。*)の場合、常にdefault.pngイメージが返されます。つまり、条件に問題があります。 – Juddling

1

他の方法でラウンドそれを試してみてください。

RewriteRule ^avatar/(.*)$ images/avatars/$1.png [NC] 
RewriteCond %{DOCUMENT_ROOT}/images/avatars/$1.png !-f 
RewriteRule ^avatar/(.*)$ images/avatars/default.png [NC,L] 
+0

これは私にとってはうまくいきませんでした。最初の条件では、バックリンク$ 1を使用していますが、ApacheのURLのどの部分がまだ使用されていないか、ファイル、/images/avatars/avatar/Juddling.png? すべてのリクエストがデフォルトのイメージとして表示されるためです。 – Juddling

+0

'$ 1'は対応する' RewriteRule'パターンのマッチを保持します(技術的な詳細についてはhttp://httpd.apache.org/docs/2.2/rewrite/rewrite_tech.htmlを参照してください)。しかし、最初の式 '%{DOCUMENT_ROOT}/images/avatars/$ 1.png'に'/'を追加する必要があります。それがうまくいかない場合は、mod_rewriteのログ機能(http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewriteloglevelを参照)を使用して、式が評価される値を確認してください。 – Gumbo

0

%{REQUEST_FILENAME}は、元の値が残り、更新されません。テストが最初に来るようにそれを再足すように:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^avatar/(.*)$ images/avatars/default.png [NC,L] 

RewriteRule ^avatar/(.*)$ images/avatars/$1.png [NC,L] 
+0

これは私の.htaccessと同じ結果を与え、default.pngではなく404を表示しています。 – Juddling

2

試してください:あなたが書き換えたときに少し空想を取得する必要がありますので、

RewriteCond %{DOCUMENT_ROOT}images/avatars/$1.png -f 
RewriteRule ^avatar/([^/]+)$ images/avatars/$1.png [L] 
RewriteRule ^avatar/([^/]+)$ images/avatars/default.png [L]