【问题标题】:Apache redirect 404 for only the files that are not found?Apache重定向404仅用于未找到的文件?
【发布时间】:2010-11-16 10:02:49
【问题描述】:

我要做的基本上是将所有请求带到一个目录,如果文件存在,则发送它。如果没有,请从父目录发送(假设它存在于那里)。文件很大而且可能很多,并且子目录会经常更改,因此文件系统链接不是一个很好的管理方式。是否有一些 Apache 配置方式可以做到这一点?例如

/path/file0
/path/file1
/path/sub1/fileA
/path/sub1/fileB
/path/sub1/fileC
/path/sub2/fileA
/path/sub2/fileB
/path/sub2/fileC

因此,如果收到/path/sub1/fileB 的请求,他们会得到/path/sub1/fileB(正常情况)。如果收到/path/sub1/file0 的请求,他们会得到/path/file0(特殊情况)。

或者也许在 PHP 中有一种方法,如果我可以让 Apache 将一个文件夹中的所有请求重定向到一个特定的 php 文件,该文件检查该文件是否存在,如果不存在则检查一个文件夹?

谢谢。

【问题讨论】:

  • 了解 Apache 的人能否请修改标题以使其有意义? 404 != 重定向。
  • 正确,404 是“未找到”...在“未找到”的情况下,我想从其他位置发送文件。

标签: apache redirect http-status-code-404


【解决方案1】:

您可以使用mod_rewrite 来做到这一点:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^path/[^/]+/([^/]+)$ path/$1 [L]

此规则会将/path/foo/bar 的请求重写为/path/bar仅当/path/foo/bar 不是常规文件时。

【讨论】:

  • 谢谢,这似乎是它,或者接近。这最终会发送 302 移动到该位置,还是实际上从该位置发送文件,就好像它在当前路径中一样?我的偏好是后一种行为...我会尝试一下...
  • 这将导致内部重定向。因此客户端不会注意到文件是否实际存在的任何差异。
【解决方案2】:

是的,PHP 可以redirect 到父目录。

【讨论】:

  • 这可以工作,如果我能以某种方式让 apache 将所有请求发送到设置标头的 php 文件......那么它基本上可以检查文件是否存在,如果存在则发送它,如果不发送重定向标头......或者甚至更好地从另一个位置发送文件。所以我想我可以使用上面的 Gumbo 规则将所有内容重新写入一个 php 文件...
猜你喜欢
  • 2016-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多