毫无疑问这是不行的,但是有没有人经历过根据配置规则在 apache 中读取和重定向请求?
例如:
<If "!%{REQUEST_URI} =~ m#files/cache/static/[A-Za-z_\-0-9]+.cache# && -f '/var/www/files/cache/static/%{tolower:%{REQUEST_URI}}.cache'">
#Read /files/cache/static/xyz.cache and redirect to url in contents
</If>
我需要能够读取文件的内容并重定向到指定的 URL。
这将允许 apache 处理动态图像请求,而不是通过 PHP。
我已经对 HTML 页面做了类似的事情,并且效果很好,但我想避免图像有“缓存”的副本,并且希望重定向到实际文件而不涉及额外的解析器。
为了清楚起见,请进行编辑:
用户 1 访问example.com/用户名-128-128.jpg
然后 PHP 解析 URL 并以正确的大小和比例检索图像(生成图像或从文件存储中检索)
说实际图像是/var/www/files/images/用户名/128/128/image.jpg
PHP 创建文件名“用户名-128-128.jpg.缓存“文件/var/www/文件/缓存/静态其中包含 ”example.com/files/images/用户名/128/128/image.jpg“然后重定向到实际文件
标题(“位置:example.com/files/images/用户名/128/128/image.jpg");
用户 2:请求同一个文件example.com/用户名-128-128.jpg
Apache 看到有一个文件“/var/www/files/cache/static/用户名-128-128.jpg.cache“然后它读取该文件并使用 mod_rewrite 重定向到该文件的内容。
我想避免的是创建/var/www/files/images/用户名/128/128/image.jpg 在 /var/www/文件/缓存/静态/
因为这很浪费。
谢谢
答案1
看起来你的逻辑是落后的,但 mod_rewrite 可能会帮助你:
RewriteMap lc int:tolower
RewriteMap nocache "txt:/files/cache/static/xyz.cache"
RewriteCond /var/www/files/cache/static/${lc:%{REQUEST_URI}}.cache !-f
RewriteRule files/cache/static/[A-Za-z_\-0-9]+.cache ${nocache:foo} [L]
你不仅需要输入目标网址,还/files/cache/static/xyz.cache
需要输入地图:
foo http://wwww.example.com/actual_file
或者
foo /actual_file
foo
也可能是一个变量。