将图像网址重写到其他域不起作用(给出404)

时间:2013-01-30 15:49:08

标签: php apache mod-rewrite

以下重写规则出了点问题。我以为我正在以正确的方式做到这一点,因为我从一本书复制而不是它应该重定向到另一个域。

我收到了以下网址:

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]

3 个答案:

答案 0 :(得分:2)

您的规则缺少扩展程序,因此它不匹配。此外,你看起来还有一个额外/最后。如果它总是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标志。我添加了它。

答案 1 :(得分:1)

您需要将规则标记为重定向,如下所示:

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]

答案 2 :(得分:0)

最后,我找到了一个不使用重定向的更好的解决方案:

 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]`

因此,在网址中,图片不会来自其他域。 P代表代理(http://httpd.apache.org/docs/2.4/rewrite/proxy.html