mirror of
https://github.com/hanzoai/next.js.git
synced 2026-09-24 17:00:51 +00:00
This adds support for a `missing` field which is complimentary to `has` to only match when `query`, `header`, or `cookie` values are not present. The `missing` field can be applied for middleware matchers as well to prevent running middleware when these fields are present. x-ref: https://github.com/vercel/vercel/pull/8874 x-ref: [slack thread](https://vercel.slack.com/archives/C03S8ED1DKM/p1667935428788529?thread_ts=1667850697.542269&cid=C03S8ED1DKM) x-ref: https://github.com/vercel/next.js/discussions/25653 x-ref: https://github.com/vercel/next.js/issues/34046 x-ref: https://github.com/vercel/next.js/issues/28185 x-ref: https://github.com/vercel/next.js/issues/25930 x-ref: https://github.com/vercel/next.js/issues/24608 x-ref: https://github.com/vercel/next.js/pull/27431 ## Bug - [ ] Related issues linked using `fixes #number` - [ ] Integration tests added - [ ] Errors have a helpful link attached, see `contributing.md` ## Feature - [ ] Implements an existing feature request or RFC. Make sure the feature request has been accepted for implementation before opening a PR. - [ ] Related issues linked using `fixes #number` - [ ] Integration tests added - [ ] Documentation added - [ ] Telemetry added. In case of a feature if it's used or not. - [ ] Errors have a helpful link attached, see `contributing.md` ## Documentation / Examples - [ ] Make sure the linting passes by running `pnpm build && pnpm lint` - [ ] The "examples guidelines" are followed from [our contributing doc](https://github.com/vercel/next.js/blob/canary/contributing/examples/adding-examples.md)
82 lines
1.4 KiB
JavaScript
82 lines
1.4 KiB
JavaScript
import { NextResponse } from 'next/server'
|
|
|
|
export default function middleware(request) {
|
|
const res = NextResponse.rewrite(new URL('/', request.url))
|
|
res.headers.set('X-From-Middleware', 'true')
|
|
return res
|
|
}
|
|
|
|
export const config = {
|
|
matcher: [
|
|
{ source: '/source-match' },
|
|
{
|
|
source: '/has-match-1',
|
|
has: [
|
|
{
|
|
type: 'header',
|
|
key: 'x-my-header',
|
|
value: '(?<myHeader>.*)',
|
|
},
|
|
],
|
|
},
|
|
{
|
|
source: '/has-match-2',
|
|
has: [
|
|
{
|
|
type: 'query',
|
|
key: 'my-query',
|
|
},
|
|
],
|
|
},
|
|
{
|
|
source: '/has-match-3',
|
|
has: [
|
|
{
|
|
type: 'cookie',
|
|
key: 'loggedIn',
|
|
value: '(?<loggedIn>true)',
|
|
},
|
|
],
|
|
},
|
|
{
|
|
source: '/has-match-4',
|
|
has: [
|
|
{
|
|
type: 'host',
|
|
value: 'example.com',
|
|
},
|
|
],
|
|
},
|
|
{
|
|
source: '/has-match-5',
|
|
has: [
|
|
{
|
|
type: 'header',
|
|
key: 'hasParam',
|
|
value: 'with-params',
|
|
},
|
|
],
|
|
},
|
|
{
|
|
source: '/missing-match-1',
|
|
missing: [
|
|
{
|
|
type: 'header',
|
|
key: 'hello',
|
|
value: '(.*)',
|
|
},
|
|
],
|
|
},
|
|
{
|
|
source: '/missing-match-2',
|
|
missing: [
|
|
{
|
|
type: 'query',
|
|
key: 'test',
|
|
value: 'value',
|
|
},
|
|
],
|
|
},
|
|
],
|
|
}
|