具有不同域的图像的URL重写

时间:2011-07-21 11:08:14

标签: regex mod-rewrite url-rewriting

我想使用以下网址:

http://mydomain.com/320x200/server/path/to/my/image.jpg

您可以在哪里找到 3个参数来检索重写:

  1. 320x200:可选参数,可以是两个数字(如“320x200”),或单个数字(如“320x”)或空(仅“x”)
  2. server:required(这是查找托管图片的服务器的特定参数,但对于这种情况并不重要)
  3. path/to/my/image.jpg:必需
  4. 并用另一个域重写它,如下所示:

    http://myotherdomain.com/320/200/server/path/to/my/image.jpg
    

    我尝试了以下重写规则,但它无效:

    RewriteRule ^([0-9]+)x([0-9]+)/([a-zA-Z0-9]+)/([a-zA-Z0-9/.]+)$ htp://myotherdomain.com/$1/$2/$3/$4 [L]

    RewriteRule ^([0-9]+)x/([a-zA-Z0-9]+)/([a-zA-Z0-9/.]+)$ htp://myotherdomain.com/$1/$2/$3 [L]

    RewriteRule ^x/([a-zA-Z0-9]+)/([a-zA-Z0-9/.]+)$ htp://myotherdomain.com/$1/$2 [L]

    为什么不起作用?

    通过regexplanet.com等网站测试时,3个正则表达式正在运行

    我试图清除浏览器缓存,重启Apache,删除cookie,......仍然无法正常工作!

    感谢您的帮助


    修改:

    最后,问题是我的.htaccess文件未正确保存(不知道原因)。

    我刚关闭并再次打开.htaccess,一切都好!

2 个答案:

答案 0 :(得分:3)

您应该通过分组来划分工作。不要费心将x转换为/,只是不要捕获它。

RewriteRule ^([0-9]+)x([0-9]+/)([a-zA-Z0-9]+)/([a-zA-Z0-9/.]+)$ http://myotherdomain.com/$1/$2$3/$4 [L]

RewriteRule ^([a-zA-Z0-9]+)/([a-zA-Z0-9/.]+)$ http://myotherdomain.com/$1/$2 [L]
  • ([0-9]+)分别捕获您的两个分辨率参数。
  • (?:....)?是非捕获分组呈现的可选项。

编辑:

可选性是一个陷阱。不要使用它 - >第二条规则。

如果其他域最终成为同一个域:

RewriteCond %{REQUEST_URI} ![0-9]+/[0-9]+.*$

会阻止循环。

答案 1 :(得分:0)

我没试过,但我希望它有效:

RewriteRule ^(([0-9]+)(x)([0-9]+)/|)([a-zA-Z0-9]+)\/([a-zA-Z0-9_\/\.-]+)$ htp://myotherdomain.com/$2$3$4$5$6/$7 [L]
$2 = 320 or empty
$3 = 'x' or empty
$4 = 200 or empty
$5 = '/' or empty
$6 = 'server'
$7 = path to image