【问题标题】:PHP: Handling Dynamic File RequestPHP:处理动态文件请求
【发布时间】:2016-04-09 07:06:43
【问题描述】:

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

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

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

任何帮助都会非常有用。 :)

【问题讨论】:

  • 你能编辑帖子并显示你的代码吗?
  • 说实话,我不知道如何处理动态请求 :(
  • 动态请求到底是什么意思?
  • @DivyeshSavaliya 除.php 之外的任何直接文件请求都应重定向到以文件名作为参数的“index.php”。
  • 您可以发布您的代码或示例吗?所以我们会为你提供一个很好的答案

标签: php html .htaccess dynamic


【解决方案1】:

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

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

内部重写所有.png 文件到index.php 传递完整的URL 作为URL 参数。 (虽然这明显不包括斜杠前缀。如果需要,您可以手动包含它。例如,?file=/$1。)

要将其扩展为包含.jpg 文件,然后更改RewriteRule 模式:

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

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

RewriteCond %{REQUEST_URI} (.*)
RewriteRule !\.php$ index.php?file=%1 [L]

对于所有非 PHP 文件(注意带有 ! 前缀的 negated 正则表达式),请求被重写,将请求的 URL 传递给 index.php。请注意,否定的正则表达式不能包含捕获组,因此需要单独的条件。

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

【讨论】:

  • 非常感谢,它成功了,但是我可以用同样的方式重定向所有非 php 文件请求吗?
  • 不完全一样,因为“所有非 php”文件需要一个否定的正则表达式 - 我会用一个例子来更新我的答案。
  • 刚刚更新/修复了 RewriteCond 以在 CondPattern 周围包含括号(捕获组)。
  • 另一种方法是简单地重写为index.php 而不是index.php?file=%1。然后,在您的 PHP 中,您可以从 $_SERVER['REQUEST_URI]` 超全局而不是您的 URL 参数获取请求的(非 PHP)URL。
  • 那很好,但是这两种方法有什么性能差异吗?
猜你喜欢
  • 2012-04-08
  • 2019-09-23
  • 2014-07-06
  • 2013-07-13
  • 2010-12-02
  • 2012-09-23
  • 2011-03-05
  • 1970-01-01
相关资源
最近更新 更多