所选 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
的内容
注:
- 我不是在寻找 404 或 403 之类的错误文档
- 我不是在寻找重定向
- 这不是重复的问题。在问这里之前,我已经搜索了 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]
我正在尝试显示文档或文件夹或文件的自定义 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
注:
- 我不是在寻找 404 或 403 之类的错误文档
- 我不是在寻找重定向
- 这不是重复的问题。在问这里之前,我已经搜索了 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]