(更新)图片网站是如何运作的

(更新)图片网站是如何运作的

我在将此 Nginx 指令转换为 Apache 时遇到问题:

Nginx(现已投入生产并正常运行)

location ~ /(.*?_trk_).*\.(jpg|jpeg|gif|png|svg|pdf|zip|woff|woff2|JPG|JPEG|GIF|PNG|SVG|PDF|ZIP|WOFF|WOFF2) {
 expires 1d;
 rewrite ".*_trk_([^_]*)_([^_]*)_([^_]*)_(.*)" -0000000$3#$3#$4#/img/trk_images/$1/$2/$3/$4;
 rewrite "-0*?((\d{2})(\d{2})(\d{2})(\d{2}))#([^#]*)#([^#]*)#([^#]*)" $uri break;
 try_files /imgn/csm/$2/$3/$4/$5/$6/$7 /img/csm/$2/$3/$4/$5/$6/$7 @notfound-csm;
}

Apache(我目前的翻译,但它不起作用:()

RewriteEngine on
RewriteCond %{REQUEST_URI} /(.*?_trk_).*\.(jpg|jpeg|gif|png|svg|pdf|zip|woff|woff2|JPG|JPEG|GIF|PNG|SVG|PDF|ZIP|WOFF|WOFF2)
RewriteRule ^.*_trk_([^_]*)_([^_]*)_([^_]*)_(.*)$ -0000000$3#$3#$4#/img/trk_images/$1/$2/$3/$4
RewriteRule ^-0*?((\d{2})(\d{2})(\d{2})(\d{2}))#([^#]*)#([^#]*)#([^#]*)$ /imgn/csm/$2/$3/$4/$5/$6/$7

这是图像 URI 的示例: http://images.domain.dev/_trk_dealer_37556_805784_bfgh54545y25203968.jpg

Nginx 配置不是我的,我必须尽快在 Apache 上翻译它,但我不知道 Nginx 如何使用 # 来分割 $3 参数:“ -0000000$3#$3#$4#/img/trk_images/$1/$2/$3/$4

(更新)图片网站是如何运作的

如果图像 URI 是:

http://images.domain.dev/_trk_dealer_37556_805784_bfgh54545y25203968.jpg

路径是这样构建的:

/_trk_[1](dealer)_[2](37556)_[3](805784)_[4](bfgh54545y25203968.jpg)

该图像保存在文件夹内:

/imgn/csm/00/80/57/84/805784/bfgh54545y25203968.jpg

参数[3]是广告id,它分为4个文件夹:

/imgn/csm/00/80/57/84/805784/bfgh54545y25203968.jpg

如何将 Nginx 指令正确转换为 Apache? 有没有办法使用一些正则表达式规则将 RewriteRule 的参数编号 3 拆分为 8 位数字 (00)/(80)/(57)/(84)?

谢谢大家!Michele

答案1

我自己找到了解决这个问题的方法,所以我希望这可以为将来的某人提供一些帮助。

RewriteEngine   on
RewriteCond     %{REQUEST_URI} /(.*?_trk_).*\.(jpg|jpeg|gif|png|svg|pdf|zip|woff|woff2|JPG|JPEG|GIF|PNG|SVG|PDF|ZIP|WOFF|WOFF2)
RewriteRule     ^.*_trk_([^_]*)_([^_]*)_([^_]*)_(.*)$ -0000000$3_$3_$4_/img/trk_images/$1/$2/$3/$4 [C]
RewriteRule     ^.*-0*?((\d{2})(\d{2})(\d{2})(\d{2}))_([^_]*)_([A-Za-z0-9_.]+)_(.*)$ /imgn/csm/$2/$3/$4/$5/$6/$7 [L]

在这种情况下不需要 [C] 和 [L] 标志,无论如何它都可以工作,但如果您的 VirtualHost 文件比我的更复杂,它会更加清晰。

我尝试过为该指令创建一个只包含一个 RewriteRule 的解决方案,但没能成功。如果有人知道怎么做,请随时告诉我。谢谢!

相关内容