首页 > 解决方案 > Mod_Rewrite:重写图像 URL 的 htaccess 规则

问题描述

我们如何在 .htaccess 文件中使用 Apache Mod_Rewrite 仅重写 .png 文件的真实路径?

可见网址:

.com/italy/region/internal/map1234.png

.com/italy/country/map1234.png

.com/italy/map1234.png

文件的真实位置:

.com/images/map1234.png

注意我指的是 Mod_Rewrite 而不是常见的 301 重定向。

标签: apache.htaccessmod-rewriteurl-rewriting

解决方案


RewriteCond %{REQUEST_URI} !/images/.*
RewriteRule ^(.*\.(gif|jpg|png))$ images/$1 [QSA,L]

它有效,但不适用于子文件夹。

这仍会重定向子文件夹中的图像,但/italy/region/internal/map1234.png会重定向到/images/italy/region/internal/map1234.png.

要使其适用于任何子文件夹,请将其更改为:

RewriteCond %{REQUEST_URI} !/images/
RewriteRule /(\w+\.(gif|jpg|png))$ images/$1 [L]

\w+(以前.*) - 通过在捕获的模式中排除斜线,我们确保我们只捕获文件名而不是整个 URL 路径。

QSA标志不是必需的。

更新:不幸的是,如果我使用带有破折号的图像,此代码将失败(404)。例如 my-name.png 有什么想法吗?

\w将上述正则表达式中的(任何单词字符)更改[\w-]为包含连字符。例如:

RewriteRule /([\w-]+\.(gif|jpg|png))$ images/$1 [L]

推荐阅读