正则表达式指向新的图像位置?

时间:2016-05-13 16:33:16

标签: regex .htaccess mod-rewrite

我有电子邮件简报的存档。原始源代码指向以下图像:

http://example.com/email/2015-06-16/weekend.jpg

...但是自从移动到存档后,现在实际的图像文件存在于:

http://example.com/email/archive/2015/2015-06-16/weekend.jpg

我的想法是使用htaccess,regex和Apache的RewriteEngine将“archive / 2015 /”插入到图像请求的中间。但我对正则表达式并不擅长。我可以描述我需要什么,但我不知道实现它的语法。

请求http://example.com/email/[someyear]-06-16/weekend.jpg时,请在“email /”

之后插入“archive / [someyear] /”

请帮帮忙?

2 个答案:

答案 0 :(得分:0)

你不需要正则表达式。尝试简单的重定向

Redirect 301 /email/ http://example.com/email/archive/2015/

答案 1 :(得分:0)

您可以使用mod_rewrite

执行此操作
RewriteRule ^email/((\d{4})-\d{2}.+) /email/archive/$2/$1 [R=302,L]

在这里,我们正在捕捉以下内容:

  1. 2015使用(\d{4})作为$2,其中{4}是要捕获的数字位数
  2. 06使用\d{2}(无需捕获此信息,因为我们将其包含在下面的第4点)
  3. 06.+
  4. 之后的所有内容
  5. email/之后的所有内容以及包含上述三点的父母的
  6. 我们然后从上面的第1点抓取$2以及从第4点抓取$1我们将它重新组合在一起。我们只检查第2点以确保我们正确看到正确的格式 - 这就是为什么我们不检查当天(我们不需要那么严格)。

    基本上,这只是一个捷径。这可以扩展(为了便于理解)以下内容:

    RewriteRule ^email/(\d{4})-(\d{2})-(\d{2})/(.+) /email/archive/$1/$1-$2-$3/$4 [R=302,L]
    

    一旦您满意,请将302更改为301以缓存重定向。