所选 URL 的自定义 404 没有 ErrorDocument

Custom 404 for selected URL without ErrorDocument

我正在尝试显示文档或文件夹或文件的自定义 404 页面,或者 link 可能存在也可能不存在,但出于某种目的我仍想向访问者显示 404 消息。

我检查过Setting a custom 404 page for a specific URL in htaccess and Setting a custom 404 page for a specific URL in htaccess

代码:

RewriteRule ^foo.html$ /spoof404.txt [L,R=404,NC]
RewriteRule ^hello$ /spoof404.txt [L,R=404,NC]
RewriteRule ^file/example.php$ /spoof404.txt [L,R=404,NC]

使用这些代码,我成功获得了 404 Status in header 但它没有显示 spoof404.txt

的内容

注:

  1. 我不是在寻找 404 或 403 之类的错误文档
  2. 我不是在寻找重定向
  3. 这不是重复的问题。在问这里之前,我已经搜索了 Whosebug 的其他部分。

I am not looking for Errordocument like 404 or 403

为什么不呢?这正是你如何做到这一点。在 Apache-only(不使用其他服务器端脚本)上没有其他方法可以触发 404 HTTP 状态并提供自定义响应。

例如:

ErrorDocument 404 /spoof404.txt

RewriteRule ^foo\.html$ - [NC,R=404]
RewriteRule ^hello$ - [NC,R=404]
RewriteRule ^file/example\.php$ - [NC,R=404]

当您请求 /foo.html 时,它将触发 404 并且 /spoof404.txt 将得到服务。

当指定 3xx 范围之外的状态代码时,substituion 字符串将被忽略(因此使用单个 - - 连字符)。在这种情况下,L 标志也是多余的,因为在指定非 3xx R 代码时它是隐含的。


更新:

how to block with parameters like example.com/something.php?something=tokens&othertoken=token

RewriteRule 指令仅匹配 URL 路径,以匹配查询字符串(第一个 ? 之后的所有内容)然后您需要一个额外的 条件RewriteCond 指令)并检查QUERY_STRING 服务器变量。

例如,要匹配 exact URL(尽管不区分大小写)并触发 404:

RewriteCond %{QUERY_STRING} ^something=tokens&othertoken=token$ [NC]
RewriteRule ^something\.php$ - [NC,R=404]