質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Next.js

Next.jsは、Reactを用いたサーバサイドレンダリングなどを行う軽量なフレームワークです。Zeit社が開発しており、nextコマンドでプロジェクトを作成することにより、開発環境整備が整った環境が即時に作成できます。

URL

URL(ユニフォームリソースロケータ)とは、インターネット上のリソース(Webページや電子メールの宛先等)を特定するための形式的な記号の並びの事を言う。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

Q&A

0回答

436閲覧

存在しないはずのページにアクセスできてしまう

TofuLove

総合スコア14

Next.js

Next.jsは、Reactを用いたサーバサイドレンダリングなどを行う軽量なフレームワークです。Zeit社が開発しており、nextコマンドでプロジェクトを作成することにより、開発環境整備が整った環境が即時に作成できます。

URL

URL(ユニフォームリソースロケータ)とは、インターネット上のリソース(Webページや電子メールの宛先等)を特定するための形式的な記号の並びの事を言う。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

0グッド

0クリップ

投稿2021/07/03 02:36

編集2021/07/03 07:24

前提

  • Next.jsで動的なページを生成しています。
  • 下記のURLのページがあります。
/{userID}/page/{pageID}

上記URLのパラメーターは、それぞれ下記の仕様です。

  • {userID}:任意の文字列、変更可
  • {pageID}:自動で生成される文字列、変更不可

ディレクトリ構造は下記の通りです。

. └── pages └── {userID} ├── [userID].tsx // ユーザーの情報が確認できるページです。誰でもアクセス可能です。 ├── userSettings.tsx // userIDを変更できるページです └── page └── [pageID].tsx

発生している問題

{userID}が存在しない文字列でも、ページにアクセスできてしまいます。

  • {userID} = foo
  • {roomID} = bar

例えばURLのパラメーターが上記の場合、下記の挙動になります。

  • /foo/page/barにアクセス→正しいページを表示
  • /baz/page/barにアクセス→正しいページを表示
  • /foo/page/bazにアクセス→404ページを表示

{pageID}が存在しない場合のみ404ページが表示されました。


ただし、存在しない{userID}の場合、ユーザー情報を確認できるページにアクセスすると、404ページが表示されました。

上記のパラメーター例においては、下記の挙動になります。

  • /baz/page/barにアクセス→正しいページを表示
  • /baz/にアクセス→404ページを表示
  • /foo/にアクセス→正しいユーザー情報確認ページを表示

上記の挙動から、末尾の動的パラメーターが存在していれば、間の動的パラメーターの整合性は問わず動的ページが表示できる、という状態になっているかと思います。

実現したいこと

{userID}と{roomID}の両方が存在する場合のみ、正しいページを表示し、それ以外の場合は404ページを表示したいです。

  • {userID} = foo
  • {roomID} = bar

例えばURLのパラメーターが上記の場合、下記の挙動にしたいです。

  • /foo/page/barにアクセス→正しいページを表示
  • /baz/page/barにアクセス→404ページを表示
  • /foo/page/bazにアクセス→404ページを表示

{userID}と/page/を除いてrootの次に{pageID}にすれば解決できそうですが、TwitterのツイートのURLと同じように、/可変ID/固定値/不変ID/という構成にして、このユーザー/が持つページの内、/このページという意味付けでURLを設定したいです。

試したこと

上記の問題点のある挙動はlocalhostで確認したものだったので、試しにデプロイして確認してみましたが、挙動に変化はありませんでした。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問