我正在尝试(内部)将/server123/get_file.php?file=frame-38-227113.jpg
之类的调用重定向到/server123/cache/2/2/7/227113/frame-38-227113.jpg
。
当然,只有该文件确实存在。否则,它需要通过get_file
脚本才能获取文件。
但是我没能创建正确的重写规则。
到目前为止我所拥有的:
RewriteEngine On
RewriteCond %{REQUEST_URI} =/get_file.php
RewriteRule ^.*$ /server063/get_file.php [L]
RewriteCond %{QUERY_STRING} file=(frame-[0-9]+-([0-9])([0-9])([0-9])[0-9]+.jpg)
RewriteCond %{REQUEST_URI} ^/(server[0-9]+)/get_file.php
RewriteCond %6/cache/%2/%3/%4/%1 -f
RewriteRule ^.*$ /$6/$5/cache/%2/%3/%4/%1 [L]
但这不起作用。
我希望有人可以给我一些见解?
此外,在尝试阻止无限循环时,我尝试使用IS_SUBREQ
,但这似乎没有做太多(例如:它总是重新尝试循环)。
答案 0 :(得分:1)
我在你的规则中看到了2个问题:
我认为使用一些环境变量魔术,您可能能够在多个语句中执行您想要的操作,但鉴于您的文件名看起来很安全,我认为在您的情况下,您可以使用变量THE_REQUEST,它允许您访问uri和查询字符串都是这样的:
RewriteCond %{THE_REQUEST} ^GET\ /(server[0-9]+)/get_file\.php\?file=(frame-[0-9]+-(([0-9])([0-9])([0-9])[0-9]+).jpg)
RewriteCond %{DOCUMENT_ROOT}/%1/cache/%4/%5/%6/%3/%2 -f
RewriteRule . %1/cache/%4/%5/%6/%3/%2 [L]
注意:THE_REQUEST未被转义!