2009-07-14 63 views
2

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

所以我想请求/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] 

阿帕奇似乎只待处理的第一RewriteRule,因为我得到一个404,如果头像是不存在的,而不是看到默认的图像。

回答

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] 

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

感谢您的帮助!

1

试试倒过来:

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

这对我来说不起作用,我认为这是因为在第一种情况下,你使用的是反向链接$ 1,但是apache并没有被告知URL的哪一部分被使用,所以它是在寻找文件,/images/avatars/avatar/Juddling.png? ,因为所有请求都会作为默认图像显示出来。 – Juddling 2009-07-14 18:36:10

+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 2009-07-14 18:50:29

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] 
+0

这给出了与我的.htaccess相同的结果,显示了404而不是default.png。 – Juddling 2009-07-14 18:46:01

2

尝试重写它以使测试首先如此:

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

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