2009-07-14 65 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]