以下重写规则有问题。我认为我的做法是正确的,因为我是从一本书中复制的,而不是应该重定向到另一个域。
我得到了以下网址:
http://www.domaina.com/some-Text-is-here-B40178.jpg
图像位于以下网址:
http://www.domainb.com/imgs/B40178.jpg
为了使其工作,应该如何编写下面的重写规则?
RewriteRule ^.*-B([0-9]+)'../$ http://www.domainb.com/imgs/B$1 [L]
您的规则缺少扩展名,因此不匹配。另外,看起来您最后还有一个额外的/。如果它总是jpg,你可以添加它。或者只是在最后匹配任何内容。
此外,您还需要捕获该扩展名。
匹配"jpg"
RewriteRule ^.*-B([0-9]+'.jpg)$ http://www.domainb.com/imgs/B$1 [R,L]
匹配任何内容
RewriteRule ^.*-B([0-9]+'..+)$ http://www.domainb.com/imgs/B$1 [R,L]
我的首选方法,匹配某些图像类型:
RewriteRule ^.*-B([0-9]+)'.(jpg|gif|png)$ http://www.domainb.com/imgs/B$1.$2 [R,L]
编辑 错过了您正在重定向到另一个域。您还需要 R 标志。我已经添加了它。
您需要将规则标记为重定向,如下所示:
RewriteRule ^.*-B([0-9]+)'../$ http://www.domainb.com/imgs/B$1 [R,L]
编辑:您还需要添加文件扩展名。我会偷懒并假设它们都是 JPG:
RewriteRule ^.*-B([0-9]+).jpg$ http://www.domainb.com/imgs/B$1.jpg [R,L]
最后,我找到了一个不使用重定向的更好解决方案:
RewriteCond %{REQUEST_URI} !^$
RewriteCond %{REQUEST_URI} !^/
RewriteRule .* - [R=400,L]
RewriteRule ^.*-B([0-9]+)'.(jpg|jpeg|png|gif|JPG|GIF|PNG|JPEG)$ http://www.domain.com/imgs/B$1.$2 [P,L]`
因此,在URL中,图像看起来不会不是来自另一个域。P 代表 代理 (http://httpd.apache.org/docs/2.4/rewrite/proxy.html)