【问题标题】:How to redirect 404 errors (and 403) to index.html with a 200 response如何使用 200 响应将 404 错误(和 403)重定向到 index.html
【发布时间】:2021-07-20 12:11:36
【问题描述】:

我正在构建一个静态网站,该网站使用 JS 解析 URL 以便确定要显示的内容。

我需要每个 URL 来实际打开 index.html,JS 可以在其中拉开路径并采取相应措施。

例如http://my.site/action/params 将被解析为带有一些参数paramsaction

背景,这将通过 CloudFront 使用自定义错误重定向从 AWS S3 提供 - 这在 AWS 上运行良好。

但是,我正在尝试在运行 apache 的 Ubuntu 下构建开发环境,并希望在本地模拟重定向。

我发现有几页很接近,但并不完全。

This page 展示了如何重定向到服务器上的自定义错误页面,该页面位于名为“404”的文件中。由于404 是实际的错误响应代码,该示例看起来有点混乱,我无法将示例修改为指向 index.html。

已接受答案中的示例表明:

Redirect 200 /404
ErrorDocument 404 /404

我已经修改为:

Redirect 200 /index.html
ErrorDocument 404 /index.html

但是这会返回一个标准的404 Not Found 错误页面。

如果我删除 Redirect 行,只留下 ErrorDocument 行,我会根据需要返回 index.html 页面,但 https 状态响应仍然是 404 代码,我需要它是200.

如果我按照示例离开 Redirect 行,我实际上得到的结果与我的修改版本相同,所以我怀疑这是不正确的行,但我无法弄清楚。

(我正在使用 Chrome 开发工具控制台查看状态代码等)。

【问题讨论】:

    标签: apache .htaccess http-headers


    【解决方案1】:

    我想我找到了使用重写规则而不是错误文档的解决方案。

    RewriteEngine On
    
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.html [L]
    

    我在这种方法中缺少的关键似乎是,包括在重写规则末尾的R=??? 状态响应代码。我花了一段时间才找到它!

    由于它使用mod_rewrite 而不是定义错误页面,我认为该机制与 CloudFront 的操作方式不同,但对于我的开发系统需要,结果似乎是相同的 - 这意味着我可以在该站点上工作无需在每次代码更改和上传后使 CloudFront 缓存失效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-02
      • 1970-01-01
      • 2015-08-22
      • 1970-01-01
      • 2016-01-06
      • 2020-05-30
      • 2014-01-19
      • 2014-03-20
      相关资源
      最近更新 更多