目前我有以下.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。
答案 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