如何使用 200 响应将 404 错误(和 403)重定向到 index.html
How to redirect 404 errors (and 403) to index.html with a 200 response
我正在构建一个静态网站,该网站使用 JS 解析 URL 以便确定要显示的内容。
我需要每个 URL 实际打开 index.html JS 可以分开路径并采取相应行动的地方。
例如 http://my.site/action/params
将被解析为带有一些参数 params
.
的 action
后台,这将使用自定义错误重定向通过 CloudFront 从 AWS S3 提供 - 这在 AWS 上运行良好。
但是,我正在尝试在 Ubuntu 运行 apache 下构建开发环境,并希望在本地模拟重定向。
我发现有几页很接近,但不完全。
This page 展示了如何重定向到服务器上名为“404”的文件中的自定义错误页面。由于 404
是实际的错误响应代码,示例看起来有点混乱,我无法修改示例以指向 index.html.
已接受答案中的示例表明:
Redirect 200 /404
ErrorDocument 404 /404
我修改为:
Redirect 200 /index.html
ErrorDocument 404 /index.html
但是这个 returns 一个标准的 404
未找到错误页面。
如果我删除 Redirect
行,只留下 ErrorDocument
行,我会根据需要返回 index.html
页面,但 https 状态响应仍然是 404
代码,我需要它是 200。
如果我按照示例离开重定向行,实际上我得到的结果与修改后的版本相同,所以我怀疑这是不正确的行,但我无法弄清楚。
(我正在使用 Chrome 开发工具控制台查看状态代码等)。
我想我找到了使用重写规则而不是错误文档的解决方案。
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.html [L]
我在这种方法中缺少的关键似乎是 而不是 在重写规则的末尾包含一个 R=???
状态响应代码。我花了一段时间才找到它!
因为它使用 mod_rewrite
而不是定义错误页面,我假设该机制与 CloudFront 的执行方式不同,但对于我的开发系统需要,结果似乎是相同的 - 这意味着我可以在网站上工作,而不必在每次代码更改和上传后使 CloudFront 缓存失效。
我正在构建一个静态网站,该网站使用 JS 解析 URL 以便确定要显示的内容。
我需要每个 URL 实际打开 index.html JS 可以分开路径并采取相应行动的地方。
例如 http://my.site/action/params
将被解析为带有一些参数 params
.
action
后台,这将使用自定义错误重定向通过 CloudFront 从 AWS S3 提供 - 这在 AWS 上运行良好。
但是,我正在尝试在 Ubuntu 运行 apache 下构建开发环境,并希望在本地模拟重定向。
我发现有几页很接近,但不完全。
This page 展示了如何重定向到服务器上名为“404”的文件中的自定义错误页面。由于 404
是实际的错误响应代码,示例看起来有点混乱,我无法修改示例以指向 index.html.
已接受答案中的示例表明:
Redirect 200 /404
ErrorDocument 404 /404
我修改为:
Redirect 200 /index.html
ErrorDocument 404 /index.html
但是这个 returns 一个标准的 404
未找到错误页面。
如果我删除 Redirect
行,只留下 ErrorDocument
行,我会根据需要返回 index.html
页面,但 https 状态响应仍然是 404
代码,我需要它是 200。
如果我按照示例离开重定向行,实际上我得到的结果与修改后的版本相同,所以我怀疑这是不正确的行,但我无法弄清楚。
(我正在使用 Chrome 开发工具控制台查看状态代码等)。
我想我找到了使用重写规则而不是错误文档的解决方案。
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.html [L]
我在这种方法中缺少的关键似乎是 而不是 在重写规则的末尾包含一个 R=???
状态响应代码。我花了一段时间才找到它!
因为它使用 mod_rewrite
而不是定义错误页面,我假设该机制与 CloudFront 的执行方式不同,但对于我的开发系统需要,结果似乎是相同的 - 这意味着我可以在网站上工作,而不必在每次代码更改和上传后使 CloudFront 缓存失效。