.htaccess图片网址的RewriteRule

时间:2015-04-27 14:11:24

标签: regex apache .htaccess mod-rewrite

目前我有以下.htaccess重写规则:

RewriteCond %{HTTP_HOST} ^blitz.example.com.s3-ap-southeast-1.amazonaws.com$
RewriteRule ^([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ %{ENV:REWRITEBASE}img/p/$1/$2/$3/$4/$1$2$3$4$5$6.jpg [L]

我正在尝试重写以下网址,使其指向实际的网址(请参阅下面的第二个链接):

http://blitz.example.com.s3-website-ap-southeast-1.amazonaws.com/3478-product_list_default/green-army-combats-type-i.jpg

我需要创建一个RewriteRule,指向实际的实际URL:

http://blitz.example.com.s3-website-ap-southeast-1.amazonaws.com/img/p/3/4/7/8/3478-product_list_default.jpg

任何人都可以帮我吗?我真的很困惑这个RewriteRule和正则表达式。

修改

我想使用以下网址:

http://blitz.example.com.s3-website-ap-southeast-1.amazonaws.com/3478-product_list_default/green-army-combats-type-i.jpg

并用另一个域重写它,如下所示:

http://blitz.example.com.s3-website-ap-southeast-1.amazonaws.com/img/p/3/4/7/8/3478-product_list_default.jpg

到目前为止,如果我使用以下html标签

<img src="http://blitz.example.com.s3-website-ap-southeast-1.amazonaws.com/3478-product_list_default/green-army-combats-type-i.jpg">

它返回404

编辑2

有趣的是,以下代码也会返回404错误

<IfModule mod_rewrite.c>
RewriteCond %{HTTP_HOST} ^blitz.example.com.s3-ap-southeast-1.amazonaws.com$
RewriteRule ^(.*)([0-9]+)([0-9]+)([0-9]+)([0-9]+)-([a-zA-Z0-9_\-/.]+)/([a-zA-Z0-9_\-/.]+)$ img/p/$2/$3/$4/$5/$2$3$4$5-$6.jpg [L]
</IfModule>

编辑3

出于绝望,我在我的.htaccess上只放了以下代码:

<IfModule mod_rewrite.c>

RewriteRule ^(.*)([0-9]+)([0-9]+)([0-9]+)([0-9]+)-([a-zA-Z0-9_\-/.]+)/([a-zA-Z0-9_\-/.]+)$ img/p/$2/$3/$4/$5/$2$3$4$5-$6.jpg [L]

</IfModule>

.htaccess中没有其他代码,但它仍然返回404。

1 个答案:

答案 0 :(得分:1)

你正试图捕捉很多东西。首先,重写引擎不传递完整的URL而只传递URI,因此任何http://blitz.example.com.s3-website-ap-southeast-1.amazonaws.com都不会捕获名称RewriteRule,所以请忘记它。其次,你捕获了图像的名称,这在我们的例子中似乎是无关紧要的。

根据评论判断,图像位于CDN(Amazon S3)上。如果要将http://blitz.example.com.s3-website-ap-southeast-1.amazonaws.com/3478-product_list_default/green-army-combats-type-i.jpg(1)转换为http://blitz.example.com.s3-website-ap-southeast-1.amazonaws.com/img/p/3/4/7/8/3478-product_list_default.jpg(2):它是S3服务器的作业。为什么是这样?这是因为(1)的HTTP请求将由尝试加载图像的Web浏览器直接发送到S3服务器。因此.htaccess必须放在S3服务器上并启用mod_rewrite

从正面看,你的正则表达式是正确的:Regex101