apache - 如何同时使用 apache mod_rewrite 和 alias?

标签 apache mod-rewrite alias

我在 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,以便它包含额外编号的目录,并且我可以使用别名将请求重定向到 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] 没有区别。

最佳答案

[L] 表示最后。

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

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

关于apache - 如何同时使用 apache mod_rewrite 和 alias?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/334111/

相关文章:

apache - RewriteCond 以任意顺序匹配查询字符串参数

mysql - 如何使用 MySQL 列别名进行计算?

ruby-on-rails - 使用 Apache POI 从 Ruby on Rails Web 应用程序中的 MS Word (.doc) 文件中提取文本

java - 将Java程序的结果放入Excel单元格

apache - htaccess 无提示重定向到子目录 : Subdirectory showing when no trailing '/'

javascript - 当用户离开网站时添加到 Apache 日志文件

apache - 如何根据主机名或 IP 地址动态更改 RewriteBase?

apache - ubuntu 14.04LTS apache2 漂亮的网址不起作用

git - 如何在 Git 别名中包含 --no-pager?

arrays - Perl:将数组别名为 array_ref