我想使用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.
答案 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]
此代码有效!我从来没有真正了解正则表达式,但它是“(。* [^ /])?”导致问题的一部分,我不确定它是什么意思但问题解决了!
感谢您的帮助!