这些 Apache 重写有什么问题?

这些 Apache 重写有什么问题?

我有一组重写,应该可以捕获/cache/images/*文件系统上不存在的任何请求,并根据后缀返回通用图像(对于/cache/images/foo_1.jpg不存在的资产请求,相应的 *_1.jpg)。

下面的代码块适用于大多数情况,但也匹配以或结尾的所有请求1.jpg,例如“domain.com/1.jpg”也返回通用图像。2.jpg3.jpg/images/generic_1.jpg

RewriteCond %{REQUEST_FILENAME} -f
RewriteRule . - [L]

RewriteCond %{REQUEST_URI} ^/cache/images/.*$ [NC]
RewriteRule .*1.jpg /images/generic_1.jpg [L]
RewriteRule .*2.jpg /images/generic_2.jpg [L]
RewriteRule .*3.jpg /images/generic_3.jpg [L]

如果我将第二个复制RewriteCond到 2.jpg 和 3.jpg 前面RewriteRule,它会按设计工作,但我想正确执行此操作并将其应用于其下方的RewriteCond三个RewriteRule。我做错了什么?

答案1

[L]- 表示最后评估的规则:http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html#rewriterule(-:你能从这里拿到它吗……?

编辑1- 清理规则:

如果你的文件以这种模式命名,你可以做这样的事情:

RewriteRule .*(\d{1,}).jpg /images/generic_$1.jpg

\d{1,}- 匹配 1 位或更大的数字;将其放在一对“ ()”中意味着“将匹配的字符串保存到$1”(又名第一个匹配),然后您可以在目标路径中使用它。

相关内容