apache - 如何使用 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
但是,这会返回一个标准的404
Not Found 错误页面。
如果我删除该Redirect
行,只留下该ErrorDocument
行,我会index.html
根据需要返回页面,但 https 状态响应仍然是404
我需要它为 200 的代码。
如果我按照示例离开 Redirect 行,我实际上得到的结果与我的修改版本相同,所以我怀疑这是不正确的行,但我无法弄清楚。
(我正在使用 Chrome 开发工具控制台查看状态代码等)。
解决方案
我想我找到了使用重写规则而不是错误文档的解决方案。
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.html [L]
我在这种方法中缺少的关键似乎不是R=???
在重写规则末尾包含状态响应代码。我花了一段时间才找到它!
由于它使用mod_rewrite
而不是定义错误页面,我假设该机制与 CloudFront 的操作方式不同,但对于我的开发系统需要,结果似乎是相同的 - 这意味着我可以在站点上工作而不必使 CloudFront 无效每次代码更改和上传后缓存。
推荐阅读
- java - 你可以远程取消rabbitmq消费者吗?
- javascript - 如何在 Vue.Js 中占位符元素的 v-bind 指令后添加 html 文本?
- python - 如何在python中导入google的taskqueue库
- joomla - Joomla - 如何将管理员模块定位到管理员主页面以外的不同页面?
- java - 所有作业完成后的 Spring 批处理触发过程
- ada - 赋值是 Ada 中派生类型和子类型之间的唯一区别吗?
- include - Apache 2.4 配置包含文件似乎被忽略
- perl - 使用 Par::Packer 和包含 Net::SSH2 的脚本创建的 .exe 不起作用
- angularjs - 使用 angularJS http 服务捕获代理错误等错误
- wordpress - 启用 Wordpress Divi 主题顶部标题菜单