【问题标题】:Redirect specific URLs to 404 with .htaccess [closed]使用 .htaccess 将特定 URL 重定向到 404 [关闭]
【发布时间】:2020-11-13 23:25:34
【问题描述】:

我有一个包含 3 个链接的列表,我想引用 404 错误页面。

  • https://example.com/a/

  • https://example.com/b/

  • https://example.com/c/

有没有办法在.htaccess 文件中写入任何进入这些链接的人都将被重定向到错误 404?

我试过这段代码,但它不起作用:

RewriteCond %{THE_REQUEST} ^a [NC]
RewriteCond %{THE_REQUEST} ^b [NC]
RewriteCond %{THE_REQUEST} ^c [NC]
RewriteRule ^ - [R=404,L]

【问题讨论】:

  • 欢迎来到SO,请阅读htaccess的ErrorDocument属性,在SO上应该很容易找到,干杯。
  • 它不起作用:/ RewriteCond %{THE_REQUEST} ^a [NC] RewriteCond %{THE_REQUEST} ^b [NC] RewriteCond %{THE_REQUEST} ^c [NC] RewriteRule ^ - [R=第404章]
  • 很好,你正在展示你的努力,继续努力。请将它们发布在您的问题中 cmets 不适用于代码,请在您的问题上添加代码标签。
  • “我希望任何进入 somename.com/a 的人都会收到错误 404” - 为什么这不会首先自动发生?除非该名称的文件或文件夹实际存在,否则这应该是开始时的默认行为。因此,如果这没有发生,那么这里肯定有更多的东西在起作用,到目前为止你忽略了告诉我们。
  • 因为真的有这样的链接。但我希望他们不知道他。入侵我的商店并放入赌博链接,我想避免这些链接。谷歌的索引充斥着赌博,这是一个问题。我正在寻找一个简单的解决方案。

标签: .htaccess http-status-code-404


【解决方案1】:

除非您有其他指令,否则您可以使用单个 RedirectMatch 指令来执行此操作。例如:

RedirectMatch 404 ^/(a|b|c)/$

任何与 完全匹配 /a//b//c/(如您的示例)的请求 URL 都将发送到您的 404 错误文档。

但是,如果您有现有的 mod_rewrite 指令,那么最好使用 mod_rewrite 代替,以避免潜在的冲突(和一般效率)。例如,以下内容需要靠近您的 .htaccess 文件的顶部:

RewriteRule ^(a|b|c)/$ - [R=404]

当使用带有R 标志的非3xx 代码时,不需要L 标志,因为它是隐含的。请注意,RewriteRule 指令没有斜杠前缀,RedirectMatch 也是如此。


RewriteCond %{THE_REQUEST} ^a [NC]
RewriteCond %{THE_REQUEST} ^b [NC]
RewriteCond %{THE_REQUEST} ^c [NC]
RewriteRule ^ - [R=404,L]

这不起作用有两个原因:

  1. THE_REQUEST 不仅包含请求的 URL,它还包含 HTTP 请求标头的第一行。例如。 GET /a/ HTTP/1.1 - 所以^a 形式的正则表达式永远不会匹配。

  2. 默认情况下,所有条件(RewriteCond 指令)都是 AND,所以它永远不可能是 a AND b AND C。您需要在前两个条件上使用OR 标志来创建逻辑OR

【讨论】:

    猜你喜欢
    • 2013-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-28
    • 2019-03-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多