Skip to content

Vue Router with createWebHistory issue on refresh pages - 404 Not found pages #70

Description

@daniloalalmeida-dev

When using createWebHistory in Vue Router, refreshing the page or accessing routes directly (e.g., http://example.com/about) results in a 404 error or incorrect rendering. This occurs because createWebHistory relies on the HTML5 history API, requiring server-side configuration to redirect all routes to the application's entry point (usually index.html). Without proper server setup, the browser attempts to fetch non-existent server-side routes.

Proposed Solution

Switch from createWebHistory to createWebHashHistory to avoid server-side configuration requirements. createWebHashHistory uses the URL hash (#) to manage routes client-side, ensuring that page refreshes and direct access work seamlessly, even on static servers.

Suggested Code Change

Update the router configuration to use createWebHashHistory:

import AppLayout from '@/layout/AppLayout.vue';
import { createRouter, createWebHashHistory } from 'vue-router';

const router = createRouter({
history: createWebHashHistory(),
routes: [ ... routes content ... ]
});
export default router;

Benefits of createWebHashHistory

No server-side configuration needed, making it ideal for static hosting (e.g., GitHub Pages, Netlify, or simple HTTP servers).
Ensures consistent behavior for page refreshes and direct route access.
Simplifies deployment for environments where server control is limited.

Trade-offs

URLs include a # (e.g., http://example.com/#/about), which may be less aesthetically pleasing.
Potentially less SEO-friendly compared to createWebHistory with proper server setup.

Additional Notes

If SEO or clean URLs are critical, we could explore keeping createWebHistory and document server-side redirect configurations (e.g., for Nginx, Apache, or Node.js). However, for simplicity and compatibility with static hosting, createWebHashHistory is recommended.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions