我正在开发一个Next.js应用程序,我有一个特定的页面,让我们称之为"谢谢",我想防止用户通过URL直接访问它.然而,我想只允许通过应用程序内的内部导航访问此页面,例如单击按钮.
我曾try 使用中间件函数将请求重定向到主页,并按预期工作.然而,当我try 使用客户端路由(例如,router.ush("/Thank-you"))导航到"谢谢"页面时,它仍然触发中间件并重定向到主页.
以下是代码的简化版本:
中间件功能(midleware.ts):
import { NextResponse } from "next/server";
import type { NextRequest } from "next/server";
export function middleware(request: NextRequest) {
return NextResponse.redirect(new URL("/", request.url));
}
export const config = {
matcher: ["/thank-you"],
};
按钮点击处理(YourComponent.tsx):
import { useRouter } from "next/router";
export default function Home() {
const router = useRouter();
const handleButtonClick = () => {
router.push("/thank-you");
};
...
}
我如何阻止直接访问"谢谢"页面,同时允许通过应用程序内的内部导航访问?
任何帮助或建议将不胜感激!
UPDATE
我try 了getServerSideProps
,但仍然有同样的问题.
点击按钮也可以重定向至主页.
export const getServerSideProps = () => {
return {
redirect: {
permanent: false,
destination: "/",
},
props: {},
};
};