为所有图像请求插入根级目录

为所有图像请求插入根级目录

我正在进行网站迁移,需要为图像文件设置一些重定向。某些图像路径请求将进入根级子目录,我需要将/new_directory/它们作为所有子目录的第一个目录,如下所示:

Old site request -> new request
website.com/dir1/image.png -> website.com/new_directory/dir2/subdir1/image.gif
website.com/dir2/subdir1/image.gif -> website.com/new_directory/dir2/subdir1/image.gif

这是我目前拥有的,但它似乎不起作用。我缺少什么?

RewriteCond %{HTTP_REQUESTURI} (dir1|dir2|dir3)(.+?)(jpg|png|gif|jpeg)    [NC,OR]
RewriteCond %{HTTP_REQUESTURI} (dir4|dir5|dir6)(.+?)(jpg|png|gif|jpeg)    [NC,OR]
RewriteCond %{HTTP_REQUESTURI} (dir7|dir8|dir9)(.+?)(jpg|png|gif|jpeg)     [NC]
RewriteRule ^(.+?)$  /new_directory/$1 [R=301,L]

我将几RewriteCond行拆分开来,因为我的实际目录列表很长,并且我希望规则能够适合一个屏幕宽度。

答案1

这对我来说很有效;请确保您有RewriteEngine on,否则重定向将不会被处理。如果您想查看是否mod_rewrite被命中,请使用RewriteLog

RewriteLog /tmp/rewrite.log
RewriteLogLevel 3

如果重新启动后没有收到任何输出,则说明mod_rewrite尚未启用。

此外,您可以像这样简化代码:

RewriteCond %{REQUEST_URI} ^/dir[1-9]/.+\./(jpg|png|gif|jpeg)$ [NC]
RewriteRule ^/(.*)$ /new_directory/$1 [R=301,L]

这将与您的操作相同,但不同之处在于:

  • 它将不再匹配/some/other/dir1/image.gif/dir1/jagif/dir1isagif
  • 重定向的 URL 将不再包含双斜杠:/new_directory//dir1/image.gif
  • 您不再需要担心贪婪或非贪婪搜索。

如果我误解了您的问题,请告诉我!

答案2

去那里测试你的正则表达式http://www.quanetic.com/Regex(当然要勾选“ereg”框)

下面是您优化过的(并通过以前的网站测试过的)RewriteRule:

RewriteCond %{HTTP_REQUESTURI} (dir(1|2|3|4|5|6|7|8|9))(.*)\.(jpg|png|gif|jpeg)$
RewriteRule (.*)  /new_directory%3\.%4 [R=301,L]

供您参考,%3 和 %4 是从 RewriteCond 中提取的(= 您忽略了 RewriteRule 中的 (.*)。示例:URI“/subrep1/subrep2/mypic.jpg”:

提取的子字符串:

%1 = dir1
%2 = 1
%3 = /subrep1/subrep2/mypic
%4 = jpg

然后在 RewriteRule 中它将被转换为:

RewriteRule (.*)  /new_directory%3\.%4 [R=301,L]

因此

/new_directory/subrep1/subrep2/mypic.jpg

相关内容