首页 > 解决方案 > 如何使用 200 响应将 404 错误(和 403)重定向到 index.html

问题描述

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

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

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

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

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

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

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

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

Redirect 200 /404
ErrorDocument 404 /404

我已修改为:

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

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

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

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

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

标签: apache.htaccesshttp-headers

解决方案


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

RewriteEngine On

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

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

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


推荐阅读