sveltejs / sapper

The next small thing in web development, powered by Svelte
https://sapper.svelte.dev
MIT License
7.01k stars 435 forks source link

src/routes/index/index.svelte #848

Open markotarnaj opened 4 years ago

markotarnaj commented 4 years ago

Description

According to documentation:

src/routes/about/index.svelte is treated the same as src/routes/about.svelte

It is reasonable to assume that src/routes/index/index.svelte would be treated the same as src/routes/index.svelte. So I created the following structure:

routes
├── about
|   ├── index.svelte
|   └── components
├── contact
|   ├── index.svelte
|   └── components
├── index
|   ├── index.svelte
|   └── components
├── _error.svelte
└── _layout.svelte

which results in a 404 on index. As a workaround I simply added an empty index.svelte file inside /routes, and that fixed everything:

routes
├── about
|   ├── index.svelte
|   └── components
├── contact
|   ├── index.svelte
|   └── components
├── index
|   ├── index.svelte
|   └── components
├── _error.svelte
├── _layout.svelte
└── index.svelte

For some reason it doesn't load the empty routes/index.svelte, but it loads the routes/index/index.svelte which seems counter-intuitive.

Logs

(index):1 Failed to load resource: the server responded with a status of 404 (Not Found)

Expected behavior

Treat src/routes/index/index.svelte same as src/routes/index.svelte.

Version info:

ghost commented 4 years ago

Another use case: Dynamically creating routes with a headless CMS. In my case, a page with the slug index is treated like index/index.svelte and the index route becomes unavailable.

The fact that an empty index.svelte file fixes the whole thing makes that not a proposal, but a bug that needs to be fixed. In my humble opinion.

Unfortunately, I am not smart enough to make a PR.

Edit: Well, my empty index.svelte is entirely ignored resulting in a 404 error as always. Is there a workaround for dynamic pages created using a [slug].svelte file?

silllli commented 3 years ago

I encountered the same problem now. I have a page titled “Index” and it should be accessible via an /index route. So I created a routes/index/ directory containing an index.svelte file—works. But now routes/index.svelte became unavailable.

Has anybody found a workaround? I would really like to refrain from renaming the route. The page has the title “Index” and should be reachable with that URL.

silllli commented 2 years ago

New project, same problem. The solution for the last project was a language identifier at the base of each route (e. g. en/index), which needed to be added anyways and made it eventually work.

This got me thinking:

routes
├── [route(index)]
|   └── index.svelte
├── _error.svelte
├── _layout.svelte
└── index.svelte

Using a route with a dynamic parameter that only matches index (using a regular expression) seems to work as expected.