• 締切済み

ウェブサイト ページがないのに表示されてしまう。

仮に以下のページが公開されているとします(他のページはありません)。 http://example.com/123.php .phpの後に/をいれた以下のURLをブラウザに入力すると、 http://example.com/123.php/aaaaa http://example.com/123.php/aa/bbb/ccc http://example.com/123.php/aaaa//bbb//ccc URLは上記のままページは「http://example.com/123.php」が 開かれてしまいます。 これはスラッシュがクエリ文字列として認識されているのでしょうか。 ページが存在しません と表示するか、.php後の/以降は省いて 「http://example.com/123.php」を開かせる方法はありますか。

みんなの回答

  • luka3
  • ベストアンサー率72% (424/583)
回答No.2

Apache の AcceptPathInfo ディレクティブの設定によるものです。 https://httpd.apache.org/docs/2.4/ja/mod/core.html#acceptpathinfo >このディレクティブは実際のファイル名の後に続くパス名情報があるリクエストを受け付けるか 拒否するかを制御します さくらのレンタルサーバーでは、「.htaccess」に[AcceptPathInfo Default]を追加すると、404エラーになるようです。 ⇒ https://faq.sakura.ad.jp/s/article/000001332 「.php後の/以降は省いて開かせる」には、phpの処理の始めに、環境変数 PATH_INFO がある場合にリダイレクトさせる処理を追加する、とかでしょうか。

yu283574
質問者

補足

紹介頂いたサイトに AcceptPathInfo Default と書かれており設定したのですが変わらず、 AcceptPathInfo off だと想定通りの動きをしました。 原因がいまだにわかりません。

  • t_ohta
  • ベストアンサー率38% (5238/13705)
回答No.1

httpd が Apache なら mod_rewrite を使ってファイル名以降にクエリ文字列が付いているモノのURLを書き換えるとかエラーページにリダイレクトすると言う方法がありますし、PHPのプロフラム側でクエリ文字列を見てエラーページを表示させたり正しいURLにリダイレクトさせたりすると言う方法があります。

関連するQ&A