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

我正在进行网站迁移,我需要为图像文件设置一些redirect。 某些图像path请求将进入根级子目录,我需要将/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行被分解,因为我的目录实际列表很长,我希望规则适合一个屏幕宽度。

这适用于我; 确保你有RewriteEngine on ,否则redirect将不会被处理。 如果你想查看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
  • redirect的url将不再包含双斜线: /new_directory//dir1/image.gif
  • 您不再需要担心贪婪或非贪婪的search。

如果我误解了你的问题,请告诉我。

去那里testing你的正则expression式http://www.quanetic.com/Regex (当然检查“ereg”框)

然后这里是你的优化(并通过以前的网站testing)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