mod_rewrite,头像设置

时间:2009-07-14 18:27:21

标签: regex apache mod-rewrite

我想使用mod_rewrite来处理我对头像图像的请求。 我有一个包含所有.png图像的文件夹,该文件以帐户的用户名命名。

所以我希望/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似乎只处理第一个RewriteRule,因为如果没有头像而不是看到默认图像,我会得到404.

4 个答案:

答案 0 :(得分:2)

尝试重新编写它,以便首先进行测试:

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

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

答案 1 :(得分:1)

反过来试试:

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

答案 2 :(得分:0)

重写时,

%{REQUEST_FILENAME}没有更新,保留原始值,所以你需要有点花哨:

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

答案 3 :(得分: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]

此代码有效!我从来没有真正了解正则表达式,但它是“(。* [^ /])?”导致问题的一部分,我不确定它是什么意思但问题解决了!

感谢您的帮助!