【发布时间】:2019-06-10 14:48:20
【问题描述】:
我已经在 SPA 中有一个可以工作的 404 处理程序。这里的问题是,例如谷歌链接到不再存在的旧页面。虽然用户会看到一个自定义的 404 组件,但我认为 google 会得到 200 OK 并继续认为该页面是有效的。
{
path: '*',
name: 'not-found',
component: NotFound // 404
}
我让服务器重新路由到 / 并让 vue 使用 History 处理路由:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
RewriteBase /
RewriteRule ^index\.html$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.html [L]
</IfModule>
这是一个带有 php 后端的标准 Vue CLI 安装。 PHP 目前仅用于 API 调用。
在这种情况下,有没有办法让服务器返回 404 状态码?
建议的解决方案? 服务器对前端发生的路由一无所知,但我可以让 webpack 输出一个站点地图或类似的东西,服务器可以验证,在标题中设置 404 并让它加载显示 404 的 SPA。这会不会没问题还是有更好的解决方案?
注意 我最终自动创建了一个站点地图,然后根据站点地图检查路线。如果路由不匹配,则将其重新路由到自定义 404。这工作得相当好,但 Google 仍然有点困惑。
【问题讨论】:
-
我认为没有解决办法。这些 http 代码用于另一层。 Vuejs 为时已晚。唯一的方法是通过使用 Ajax 发送一个 http get 请求然后检查状态代码来对其进行分类。如果它 404 重定向或使用响应。
-
@msphn 建议的解决方案不是可行的后备方案吗?让 PHP 读取输出站点地图并验证路由 - 然后决定是否在标题中设置 404?或者重定向到 404 我猜。只是有点笨拙。
-
不会。但是你需要一个 404 码吗?
-
一般来说,这只是关于 SEO 和搜索引擎的过时概念的问题。客户也不理解这些概念,并且一直在为 SEO 和其他东西哭泣。我已经构建了 API 来生成 vue 路由,只是为了能够向某些用户代理实际显示开放的图形数据。真是让人头疼。
-
@msphn 我不需要 404,搜索引擎需要。另一个站点曾经在同一个域上,因此它正在 ping 不再存在的路由,这很烦人。
标签: php .htaccess vuejs2 vue-router