vercel / next.js

The React Framework
https://nextjs.org
MIT License
124.84k stars 26.65k forks source link

Edge Middleware's `NextResponse.redirect()` function removes consecutive slashes in destination URL on Vercel #53309

Closed steven-tey closed 11 months ago

steven-tey commented 1 year ago

Verify canary release

Provide environment information

Operating System:
      Platform: darwin
      Arch: arm64
      Version: Darwin Kernel Version 22.5.0: Thu Jun  8 22:22:20 PDT 2023; root:xnu-8796.121.3~7/RELEASE_ARM64_T6000
    Binaries:
      Node: 16.16.0
      npm: 8.11.0
      Yarn: 1.22.17
      pnpm: 8.6.10
    Relevant Packages:
      next: 13.4.13-canary.6
      eslint-config-next: 13.4.12
      react: 18.2.0
      react-dom: 18.2.0
      typescript: 5.1.6
    Next.js Config:
      output: N/A

Which area(s) of Next.js are affected? (leave empty if unsure)

Middleware / Edge (API routes, runtime)

Link to the code that reproduces this issue or a replay of the bug

https://github.com/uncurated-tests/middleware-redirect-bug

To Reproduce

  1. Clone the repo and run it locally.
  2. Visit http://localhost:3000/redirect
  3. You are redirected to the correct destination URL
  4. Now visit https://middleware-redirect-bug.vercel.app/redirect (production version)
  5. You are redirected to the wrong URL (empty screen)

Describe the Bug

The destination URL is a Vue Playground link:

https://play.vuejs.org/#eNqNVE1v2zAM/SucLnUA5wMrdsmcAN3QQ3fYim63ugfDphO1siVIcprC8H8fJct2WrTZcrFEvkc+8SMtu1JqcWiQrVlics2VBYO2UdtUpzWvlNQWWtBYQgellhWkjNApc+4TyHdZqcG/WLqbCzrBclkbC5nWsHHBovuH2eASaKHgzpEy1Zh9yr4OLlJyU1vUh0xE0Qw2W2idGejHS4g8azPxZi7BgsANLpwlmq4C653d+5zvsKV6Q5YqGvUN+LfBYLuBL7NJugtyFu+SrU4IXnPP6OL++3m1WrmTT54s+4b4VniDxUqJzKK3ACS+6msjK7zSOnvZpIySpmyb+A54VLJ8RWIxs4aaUfLd4tHImtreulApy4nBBepfynJqVsrWVGz/GIoqhHz+4W1WNxgP9nyP+dM79kdzdLaU3Wo01D4ahNFnM71D27uvf//EI51HZyWLRhD6jPMOjRSN09jDvjV1QbJPcF7tjZ9LXu/+mOujxdoMj3JCQ8n9u2lMXbE+evok93Jx6Xlp3VEVhxE/vzdW3mEZw3Nm8/0HC9RvhtJSGRqLAkte4627RWHWx/Y6VWG+7IvCNXhrmBxw1KwRdg39ptw/hNFyn26c5j5diEkJvcLIp4/hYsx1MRK89rB9wf1qrOOQL2hz8aUgp9xFFz2ijzVJ6COGWOfoNMyDki4eEAWiCl0co/57Uwp+CEeAtp1qOuxm10HyaT4Hu+cGGlUQ1UBmAI8Kc4sFzOcjP2nEeKab4HCYl1LT9qHACmsLvJ4ypAzWT+h2M3hpPyc28f83rQe7d5D+IVHXJcvTpxFiKfikdDlKnXAn/wis+wv/Of6X

There is a double slash around the middle (uvf//EI5).

In the production URL, the double slash is turned into a single slash, which breaks the URL and renders it completely useless.

https://play.vuejs.org/#eNqNVE1v2zAM/SucLnUA5wMrdsmcAN3QQ3fYim63ugfDphO1siVIcprC8H8fJct2WrTZcrFEvkc+8SMtu1JqcWiQrVlics2VBYO2UdtUpzWvlNQWWtBYQgellhWkjNApc+4TyHdZqcG/WLqbCzrBclkbC5nWsHHBovuH2eASaKHgzpEy1Zh9yr4OLlJyU1vUh0xE0Qw2W2idGejHS4g8azPxZi7BgsANLpwlmq4C653d+5zvsKV6Q5YqGvUN+LfBYLuBL7NJugtyFu+SrU4IXnPP6OL++3m1WrmTT54s+4b4VniDxUqJzKK3ACS+6msjK7zSOnvZpIySpmyb+A54VLJ8RWIxs4aaUfLd4tHImtreulApy4nBBepfynJqVsrWVGz/GIoqhHz+4W1WNxgP9nyP+dM79kdzdLaU3Wo01D4ahNFnM71D27uvf/EI51HZyWLRhD6jPMOjRSN09jDvjV1QbJPcF7tjZ9LXu/+mOujxdoMj3JCQ8n9u2lMXbE+evok93Jx6Xlp3VEVhxE/vzdW3mEZw3Nm8/0HC9RvhtJSGRqLAkte4627RWHWx/Y6VWG+7IvCNXhrmBxw1KwRdg39ptw/hNFyn26c5j5diEkJvcLIp4/hYsx1MRK89rB9wf1qrOOQL2hz8aUgp9xFFz2ijzVJ6COGWOfoNMyDki4eEAWiCl0co/57Uwp+CEeAtp1qOuxm10HyaT4Hu+cGGlUQ1UBmAI8Kc4sFzOcjP2nEeKab4HCYl1LT9qHACmsLvJ4ypAzWT+h2M3hpPyc28f83rQe7d5D+IVHXJcvTpxFiKfikdDlKnXAn/wis+wv/Of6X

Expected Behavior

You should be redirected to the same URL in production and in localhost:

https://play.vuejs.org/#eNqNVE1v2zAM/SucLnUA5wMrdsmcAN3QQ3fYim63ugfDphO1siVIcprC8H8fJct2WrTZcrFEvkc+8SMtu1JqcWiQrVlics2VBYO2UdtUpzWvlNQWWtBYQgellhWkjNApc+4TyHdZqcG/WLqbCzrBclkbC5nWsHHBovuH2eASaKHgzpEy1Zh9yr4OLlJyU1vUh0xE0Qw2W2idGejHS4g8azPxZi7BgsANLpwlmq4C653d+5zvsKV6Q5YqGvUN+LfBYLuBL7NJugtyFu+SrU4IXnPP6OL++3m1WrmTT54s+4b4VniDxUqJzKK3ACS+6msjK7zSOnvZpIySpmyb+A54VLJ8RWIxs4aaUfLd4tHImtreulApy4nBBepfynJqVsrWVGz/GIoqhHz+4W1WNxgP9nyP+dM79kdzdLaU3Wo01D4ahNFnM71D27uvf//EI51HZyWLRhD6jPMOjRSN09jDvjV1QbJPcF7tjZ9LXu/+mOujxdoMj3JCQ8n9u2lMXbE+evok93Jx6Xlp3VEVhxE/vzdW3mEZw3Nm8/0HC9RvhtJSGRqLAkte4627RWHWx/Y6VWG+7IvCNXhrmBxw1KwRdg39ptw/hNFyn26c5j5diEkJvcLIp4/hYsx1MRK89rB9wf1qrOOQL2hz8aUgp9xFFz2ijzVJ6COGWOfoNMyDki4eEAWiCl0co/57Uwp+CEeAtp1qOuxm10HyaT4Hu+cGGlUQ1UBmAI8Kc4sFzOcjP2nEeKab4HCYl1LT9qHACmsLvJ4ypAzWT+h2M3hpPyc28f83rQe7d5D+IVHXJcvTpxFiKfikdDlKnXAn/wis+wv/Of6X

Which browser are you using? (if relevant)

No response

How are you deploying your application? (if relevant)

No response

steven-tey commented 11 months ago

Seems to be fixed on latest canary!

github-actions[bot] commented 11 months ago

This closed issue has been automatically locked because it had no new activity for 2 weeks. If you are running into a similar issue, please create a new issue with the steps to reproduce. Thank you.