我在将此 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 的解决方案,但没能成功。如果有人知道怎么做,请随时告诉我。谢谢!