---
title: Filtering query parameters
description: Learn how to filter query parameters in your Middleware.
url: /kb/guide/filter-query-parameters
canonical_url: "https://vercel.com/kb/guide/filter-query-parameters"
last_updated: 2025-11-11
authors: DX Team
related:
  - /docs/routing-middleware
  - /docs/routing-middleware/api
install_vercel_plugin: npx plugins add vercel/vercel-plugin
---

The following example shows how to filter query parameters in your Middleware.

Your `middleware` file should be placed at the root of your project. If you are using the `src` directory, the file should be placed in the `src` directory.

`import { NextResponse } from 'next/server'; const allowedParams = ['allowed']; export const config = { matcher: '/', }; export default function middleware(request) { const url = request.nextUrl; let changed = false; url.searchParams.forEach((_, key) => { if (!allowedParams.includes(key)) { url.searchParams.delete(key); changed = true; } }); // Avoid infinite loop by only redirecting if the query // params were changed if (changed) { return NextResponse.rewrite(url); } }` `import { NextResponse } from 'next/server'; import type { NextRequest } from 'next/server'; const allowedParams = ['allowed']; export const config = { matcher: '/', }; export default function middleware(request: NextRequest) { const url = request.nextUrl; let changed = false; url.searchParams.forEach((_, key) => { if (!allowedParams.includes(key)) { url.searchParams.delete(key); changed = true; } }); // Avoid infinite loop by only redirecting if the query // params were changed if (changed) { return NextResponse.rewrite(url); } }` ## More resources - [Middleware](/docs/routing-middleware)
  
- [Middleware API](/docs/routing-middleware/api)