-
Notifications
You must be signed in to change notification settings - Fork 27.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Not-found broken with multiple root layouts #59180
Comments
Seems this is same/similar issue. How come multiple root layouts can't have it's own 404/error handlers.. |
Please see #55191 (comment) |
## Why? For multi-root layouts (route groups on the root with their root layouts, no layout file on the root), it is not possible to use global `not-found` since the `layout` is missing on the root. ```sh . └── app/ ├── (main)/ │ └── layout.js ├── (sub)/ │ └── layout.js └── not-found.js --> ERR: missing layout ``` Current Behavior: ```sh not-found.js doesn't have a root layout. To fix this error, make sure every page has a root layout. ``` ## What? Let multi-root layouts also benefit from the global `not-found`. ## How? Wrap root `not-found` with default layout if root layout does not exist. Although this solution is not `multi-root` specific, it won't produce critical issues since a root `layout` is required for other cases. Fixes #55191 #54980 #59180
Looks like the fix commit has been reverted 15 hours ago (#64516). Is there an update when we'll get this working? |
No didn't get reverted, it was cuz of the CI. It's fixed now :) hope you could check it out and close this issue as well. |
Ok, checked 14.2.1 (which has that fix), and the problem outlined in the OP message still exists. It's a huge problem for people that are working with Payload CMS 3.0 (payloadcms/payload-3.0-demo#84 (comment)), which uses two adjacent group routes and the structure is the following: We need both route groups completely separated, both having their own root layouts and their own not-found components. With how things are currently, there is no way of doing that apart from dirty workarounds. I think most people experiencing this issue expected the behavior to be able to simply add |
@iamlinkus Don't think it appended to the stable version, have you checked on canary? |
TLDR; With the latest cannary (14.3.0-canary.6), which includes the fix, the following structure still doesn't show the custom
I can confirm that it now lets you have a What we need: the ability for each group route (including a group route, regardless if it's a root (homepage), or a sub-page (/admin)) to have a custom not-found. Currently, even with your fix, if I want to have a custom not-found component for my homepage (the (app) group route from the screenshot in my previous comment), the only way I can do that is adding a Also, even with that fix, next.js doesn't seem to care about the |
I've created a devbox to recreate the issue. None of the not-found components are rendered. Only the generic next.js one is. |
Link to the code that reproduces this issue
https://codesandbox.io/p/devbox/blissful-fog-nflrh6
To Reproduce
not found page
Current vs. Expected behavior
Generic 404 Nextjs error page is shown when I navigate to any unknow urls.
I expect to be redirected to my custom 404 UI handler
Verify canary release
Provide environment information
Operating System: Platform: darwin Arch: x64 Version: Darwin Kernel Version 22.6.0: Wed Jul 5 22:21:56 PDT 2023; root:xnu-8796.141.3~6/RELEASE_X86_64 Binaries: Node: 20.9.0 npm: 10.1.0 Yarn: N/A pnpm: 8.9.0 Relevant Packages: next: 14.0.3 eslint-config-next: 13.5.6 react: 18.2.0 react-dom: 18.2.0 typescript: 5.2.2 Next.js Config: output: N/A
Which area(s) are affected? (Select all that apply)
App Router, Routing (next/router, next/navigation, next/link)
Additional context
https://nextjs.org/docs/app/api-reference/file-conventions/not-found
According to the docs in order to be able to handle any unmatched URLs in the application we are bound to the fixed path for the not-found UI that must be placed at the root of the app ->
app/not-found.js
This breaks not-found custom UI handling as per provided example.
I've 2 root layout groups https://nextjs.org/docs/app/building-your-application/routing/route-groups#creating-multiple-root-layouts
With this setup and not having app root not-found file it's not possible to be able to handle 404 with custom UI as any 404 url handling is bound to the root
app/not-found.tsx
.I believe this should not be bound to the fixed path but rather the
top most
existingnot-found
file and if no file exist then generic 404 should intercept. This also applies for the error.tsx I believe.The text was updated successfully, but these errors were encountered: