2008-12-02 29 views
16

我有一个webroot之外的目录,用于存储从单独的管理系统上传的图像。图像存储格式为:如何同时使用apache mod_rewrite和别名?

filepath/writable/images/00/00/23/65/filename-236581.jpg 

(其中Web根目录是文件路径/ HTML)

...例如。这里,236是数据库中图像的ID,文件系统被分解为编号目录,以阻止在一个目录内使用超过100个inode。

我希望能够从前端Web服务器访问这些,就像这样:

http://(server)/filename-236581.jpg 

其中filename是一个SEO优化字符串,一样的实际文件名。

我可以通过mod-rewrite来重写URL,以便它包含额外编号的目录,并且我可以获得别名以将请求重定向到可写/图像目录,但是我不能同时执行这两个操作。如果我将别名和mod_rewrite指令都放进去,它会忽略别名,并且错误日志会抱怨它找不到filepath/html/uploaded-images。

这是我到目前为止有:

RewriteRule ^(.*)\/([^\/]*)-([0-9])\.(gif|jpg|jpeg|png)$ /uploaded-images/00/00/00/00/$2-$3.$4 [L,NC] 

...等等,一路攀升到:

RewriteRule ^(.*)\/([^\/]*)-([0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9])\.(gif|jpg|jpeg|png)$ /uploaded-images/$3$4/$5$6/$7$8/$9$10/$2-$3$4$5$6$7$8$9$10$11$12.$13 [L,NC] 

alias /uploaded-images "filepath/writable/images" 

取出[L]没有什么区别。

回答

18

[L]表示最后一个。

你真正需要使用的还有[PT]标志,它表明你的重写规则所产生的路径应该被传递给下一个处理程序,在你的情况下它是alias指令。

由于[PT]标签也意味着[L]标签,您不再需要[L]。

1

即[L]你的意思重写规则后,“最后”

说实话,我认为,这只是意味着进一步的RewriteRule线将被忽略,但它可能是值得一试。