Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/255.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/81.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
PHP:处理动态文件请求_Php_Html_.htaccess_Dynamic - Fatal编程技术网

PHP:处理动态文件请求

PHP:处理动态文件请求,php,html,.htaccess,dynamic,Php,Html,.htaccess,Dynamic,我正在开发一个Web应用程序,其中所有图像请求都将由index.php页面直接处理。例如,如果请求文件image1.png,它将被重定向到index.php,其中显示image1.png文件的详细信息 我编写了一些代码,用于在文件名作为GET参数传递到index.php文件时显示文件的详细信息 但我不确定如何捕获所有图像文件请求并将它们重定向到index.php,同时通过GET将请求的文件名作为参数传递 任何帮助都将是巨大的。:) 在文档根目录的.htaccess文件中尝试以下操作: Rewri

我正在开发一个Web应用程序,其中所有图像请求都将由
index.php
页面直接处理。例如,如果请求文件
image1.png
,它将被重定向到
index.php
,其中显示
image1.png
文件的详细信息

我编写了一些代码,用于在文件名作为GET参数传递到
index.php
文件时显示文件的详细信息

但我不确定如何捕获所有图像文件请求并将它们重定向到
index.php
,同时通过GET将请求的文件名作为参数传递


任何帮助都将是巨大的。:)

在文档根目录的.htaccess文件中尝试以下操作:

RewriteEngine On
RewriteRule (.+\.png)$ index.php?file=$1 [L]
这会在内部将所有
.png
文件重写为
index.php
,并将完整URL作为URL参数传递。(尽管这明显排除了斜杠前缀。如果需要,您可以手动包括它。例如,
?file=/$1

要将其扩展为包括
.jpg
文件,然后更改
重写规则
模式:

RewriteRule (.+\.(png|jpg))$ index.php?file=$1 [L]

编辑:要路由所有非PHP文件,可以执行以下操作:

RewriteCond %{REQUEST_URI} (.*)
RewriteRule !\.php$ index.php?file=%1 [L]
对于所有非PHP文件(注意带有
前缀的否定正则表达式),请求被重写,并将请求的URL传递到
index.PHP
。请注意,被否定的正则表达式不能包含捕获组,因此需要单独的条件


请注意,这包括斜杠前缀(因为它是作为
REQUEST\u URI
变量的一部分包含的),而上面的示例没有包含斜杠前缀。

您可以编辑帖子并显示代码吗?老实说,我不知道如何处理动态请求:(你所说的动态请求到底是什么意思?@DivyeshSavaliya除了
.php
之外的任何直接文件请求都应该重定向到'index.php',并将文件名作为其参数。你能发布你的代码或示例吗?因此我们将为你提供一个很好的答案谢谢你,它很有效,但我能以同样的方式重定向所有非php文件请求吗?不完全一样,因为“所有非php”文件需要一个否定的正则表达式-我将用一个例子更新我的答案。刚刚更新/修复了
RewriteCond
以包含括号(捕获组)另一种方法是简单地重写为
index.php
,而不是
index.php?文件=%1
。然后,在php中,您可以从
$\u服务器['REQUEST\u URI
]获取请求的(非php)URL`超级全局而不是URL参数。这很好,但是这两种方法之间有性能差异吗?