【问题标题】:Mod_Rewrite: htaccess rule to rewrite image URLMod_Rewrite:重写图像 URL 的 htaccess 规则
【发布时间】:2020-11-25 11:56:27
【问题描述】:

我们如何使用 .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 重定向。

【问题讨论】:

  • @anubhava RewriteCond %{REQUEST_URI} !/images/.* RewriteRule ^(.*\.(gif|jpg|png))$ images/$1 [QSA,L] 它可以工作,但不适用于子文件夹。我需要找到正确的语法来引用 /images/file.png 而不是 ..path/images/file.png

标签: apache .htaccess mod-rewrite url-rewriting


【解决方案1】:
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]

【讨论】:

  • 不幸的是,如果我使用带有破折号的图像,此代码将失败 (404)。例如 my-name.png 有什么想法吗? @mrwhite
  • 在正则表达式中将 \w 模式更改为 [\w-] 以包含连字符。我已经更新了我的答案。
猜你喜欢
  • 1970-01-01
  • 2012-11-27
  • 2011-12-06
  • 2016-11-19
  • 1970-01-01
  • 1970-01-01
  • 2023-03-09
相关资源
最近更新 更多