【问题标题】:How to use apache mod_rewrite and alias at the same time?如何同时使用 apache mod_rewrite 和 alias?
【发布时间】:2010-09-24 22:46:14
【问题描述】:

我在 webroot 之外有一个目录,用于存储从单独的管理系统上传的图像。图像以这种格式存储:

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

(其中 webroot 是文件路径/html)

...例如。这里,236 是图片在数据库中的 ID,文件系统被分成了编号的目录,以防止在一个目录中使用 100 多个 inode。

我希望能够从前端网络服务器访问这些,如下所示:

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

其中 filename 是一个 seo 优化的字符串,与实际文件的名称相同。

我可以让 mod-rewrite 重写 URL,使其包含额外编号的目录,我可以让 alias 将请求重定向到 writable/images 目录,但我不能同时做这两个。如果我同时放入 alias 和 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] 没有区别。

【问题讨论】:

    标签: apache mod-rewrite alias


    【解决方案1】:

    [L] 表示最后一个。

    您真正需要使用的是 [PT] 标志,以指示重写规则的结果路径应传递给下一个处理程序,在您的情况下是别名指令。

    由于 [PT] 标签也暗示了 [L] 标签,因此您也不再需要 [L]。

    【讨论】:

      【解决方案2】:

      RewriteRule 后面的 [L] 表示“最后一个”

      老实说,我认为这只是意味着更多的 RewriteRule 行将被忽略,但可能值得一试。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-06-26
        • 1970-01-01
        • 2012-08-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-06
        相关资源
        最近更新 更多