【发布时间】:2020-04-19 07:25:01
【问题描述】:
我已经尝试了十几种方法来做到这一点。 .htaccess 在 apache 托管(我的网站托管的首选环境)中,通过 heroku,通过带有 _redirects 文件和 netlify.toml 文件的 netlify。而且它们似乎都不起作用。 Vue 建议像这样编写.htaccess 文件:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.html$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.html [L]
</IfModule>
但它不会重新加载到同一页面。它重新加载到 index.html 主页面。现在,我明白为什么要这样做了。本质上,SPA 中的每个页面都是一个 index.html。正是这些组件使它看起来像一个不同的页面。但是,这适用于我见过的每个 SPA 网站。所以当我重新加载时,必须有一种方法让渲染保持一致。
如果有关系,这里有一些相关代码
环境
- VueJS 2
- 类星体 1.0
- Firebase
- Vuew 路由器(在 VueJS 中开箱即用)
QUASAR.CONF.JS
build: { vueRouterMode: "history" }
ROUTES.JS(最小)
import Layout from "layouts/Layout.vue";
import Home from "pages/Index.vue";
import About from "pages/About.vue";
import Contact from "pages/Contact.vue";
const routes = [
{
path: "/",
component: Layout,
children: [
{ path: "/", component: Home },
{ path: "/about", component: About },
{ path: "/contact", component: Contact }
]
}
];
// Always leave this as last one
if (process.env.MODE !== "ssr") {
routes.push({
path: "*",
component: () => import("pages/Error404.vue")
});
}
export default routes;
如果你有什么需要看的,请告诉我。
问题 该页面加载正常,但是当我重新加载页面时,它会加载主页(HOME),即索引页面。如果没有 htaccess 代码,它会显示找不到页面(甚至不是我自己的 404)。历史模式会从 URL 中删除 # 并将其置于哈希模式也无法修复它。
任何帮助将不胜感激
【问题讨论】:
-
您的意思是即使 Vue 应用程序在例如 www.yoursite.com/#/about 的路线上,页面刷新也会将您带到您的“索引”页面而不是“关于”页面?假设你当然有一个关于页面
-
@CoderLee 正确。
-
您是否尝试过删除 .htaccess 和其他规则?您应该只需要 apache2 或您使用的任何服务器来提供索引 HTML 并让 JS 处理其余部分。听起来有些东西正在强制您的 URL 回到索引或覆盖您当前的路由。
-
删除 htaccess 会破坏它。它显示 404 而不是重新路由(甚至主页)。我也在问题中解释了这一点。此外,当我设置 htaccess 规则时,它会进入整个站点的主根目录。不只是一页。我正在使用 Dreamhost 托管
-
您是否尝试过在您的 Vue 应用程序中删除 404 的全部捕获?也许 path:'*' 正在捕获每条路线。听起来好像有什么在做。
标签: javascript .htaccess vue.js vuejs2 vue-router