Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.htaccess 仅当HTTP请求存在时才将其重定向到文件_.htaccess_Mod Rewrite_Apache2 - Fatal编程技术网

.htaccess 仅当HTTP请求存在时才将其重定向到文件

.htaccess 仅当HTTP请求存在时才将其重定向到文件,.htaccess,mod-rewrite,apache2,.htaccess,Mod Rewrite,Apache2,我正在尝试(内部)将一个调用重定向到/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 Rewrit

我正在尝试(内部)将一个调用重定向到
/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
,但这似乎没有什么作用(例如:它总是重新尝试循环)。

我在您的规则中看到两个问题:

  • 您的组和文件名似乎与您所说的不匹配。仔细查看目录结构,您似乎有一个包含文件完整6位id的目录,而您没有捕获该文件
  • %N替换只包含最后一个重写第二条语句的匹配项(根据文档,请参阅:);这意味着您不能在几秒钟内访问匹配项
  • 我认为使用一些环境变量magic,您可能可以在多个语句中执行您想要的操作,但是考虑到您的文件名看起来是安全的,我认为在您的情况下,您可以使用变量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]
    
    注意:_请求不会被转义