• 受付中

報酬付き

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

仮に以下のページが公開されているとします(他のページはありません)。 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
  • ベストアンサー率74% (314/420)
回答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% (5104/13336)
回答No.1

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

全文を見る
すると、全ての回答が全文表示されます。

ベストアンサー獲得でポイントゲット!

関連するQ&A

  • .htaccessを特定のフォルダだけ無効にしたい

    .htaccessに以下のように書いて、 RewriteCond %{THE_REQUEST} ^.*/index.(html|php) RewriteRule ^(.*)index.(html|php)$ http://%{HTTP_HOST}/$1 [R=301,L] 「http://example.com/hoge/index.php」などにアクセスされたときにindex.phpを削除して 「http://example.com/hoge/」を表示するようにしています。 例えば、以下にアクセスすると http://example.com/aaa/index.php http://example.com/bbb/index.html http://example.com/ccc/ddd/index.php?p=1 それぞれ以下のアドレスになります。 http://example.com/aaa/ http://example.com/bbb/ http://example.com/ccc/ddd/?p=1 これを、特定のアドレス「http://example.com/tokutei/index.php」にアクセスされたときだけ、 「http://example.com/tokutei/」にせず、そのまま「http://example.com/tokutei/index.php」を表示するようにしたいのですが、 どうすれば良いでしょうか。 「http://example.com/tokutei/index.php?p=1」や「http://example.com/tokutei/index.php?p=1&a=5」などにアクセスされても そのまま表示するようにしたいです。 よろしくお願いいたします。

    • ベストアンサー
    • HTML
  • クリックされた時にページを表示する前に処理する方法

    以下のようにクリックされた時 まず、ファイルに書き出した後にリンク先のページを表示したのですが aaa.phpのページ <a href="bbb.php?genre=1">1</a> <a href="bbb.php?genre=2">2</a> <a href="bbb.php?genre=3">3</a> (1)aaaプログラム上で、ファイルに書き出す (2)対象ページを表示 対象ページプログラムでファイルを書き出す方法はできますが、他のページからの 移動の時はファイルを書き出したくありません。 また、途中プログラムを作成して、そのプログラムが振り分ける方法のあると思いま すが、・・・。 aaa.phpのページ <a href=.cccphp?genre=1>1</a> <a href=ccc.php?genre=2>2</a> <a href=ccc.php?genre=3>3</a> ccc.php ファイル出力 Location・・・で表示 あくまでも、aaa.php内でファイルを書き出してから、対象ページを表示する方法 をお教えお願い致します。

    • ベストアンサー
    • PHP
  • wordpressで作成しているサイトとhosts

    はじめまして。開発会社にお願いして作ってもらっているサイトで困っており、 サーバ会社に聞いても原因不明なのです。 どなたかお知恵を拝借できないでしょうか? ------------- 【現状】 ・Aというサイト(aaaa.com)をリニューアルしている。 ・ドメインはaaa.comを利用するが、サーバは引越し。 ・現在新レンタルサーバにてwordpressで開発中。新レンタルサーバには既に稼動している別ドメインのサイトがあるため、バーチャルドメインで対応していただく。 ・確認はhostsの書き換えで行う。公開時にドメインのdnsを切り替え。 hostsにはwww.aaaa.com、aaaa.comを明記。 【困っていること】 hostsを切り替えて確認しているが、トップページ以外のURLが正しいものにならない。 URL直打ちでトップページにいく⇒aaaa.com ↓↓↓↓↓ トップページからグローバルメニューで下層へ遷移する⇒下層ページすべて謎のURL(サーバの名前?)で表示されている。 下階層(aaaa.com/bbb/)にも直打ちで行くと行けるが、グローバルメニューからの遷移はすべて謎URL。 -------------- なのです。 これに対して、 【開発側の説明】 ・WORDPRESSはURLを自動生成するために、きちんとしたURL(aaaa.com/bbb~)にならない ・これを本来のURL(aaaa.com/bbb~)で表示するには別途プログラムを組む必要がある。 【↑に対するサーバ会社の説明】 ・一応(そこの)サーバを読んでいるには読んでいるが、通常は考えられない。 ・何かプログラムを仕込んでいるのでは? ・公開時(DNS切り替え時)にURLが変わるかどうかはわからない。 -------------- との回答がありました。 開発側にさらに問い合わせてみても、プログラムは組んでいないようです。 どなたかこのような経験がある方はいらっしゃいませんでしょうか。 #もし解決しないようであれば、新しくバーチャルドメインを切り分けてもらい、 そこに新しく開発してもらったほうがよいのかも、とも思ってもいるのですが、 同じ結果になってしまうでしょうか??

    • 締切済み
    • PHP
  • 自宅サーバへのアクセス

    はじめまして。 自宅サーバを運営しようと思っているのですが、 わからないことが出てきたので、質問させていただきます。 当方、サーバを以下の構成で構築しております。 回線:YahooBB! 12M OS:windowsXP pro サーバ:apache2.0.59 DB:mySQL 4.0.25-nt CGI:activ perl 5.6 PHP:4.4.8 この構成で、Movable Type3.6とOScommerceを動かしております。 公開用のアドレスはDyndns.comのサービスを利用しております。 そして、質問の内容はというと、 LAN内の他のパソコン、LAN外部のパソコンからはこの サーバのwebページを見ることが出来ます。 この際、ブラウザに打ち込むアドレスは aaaaa.bbb.com というように、Dyndnsにて設定したアドレスです。 しかし、サーバ機のブラウザから同じように、 aaaaa.bbb.com と入力すると、なぜかIDとパスワードを聞かれます。 localhost と入力すれば問題ないのですが、不思議です。 どのような原因が考えられますでしょうか。 また、その解決方法はありますでしょうか。 ご回答よろしくお願いします。

  • 【超初歩】配列に格納した文字列を書き出すには?

    配列である、$arrMyString[] に、 aaa@example.com bbb@example.com ccc@example.com ddd@example.com eee@example.com といった5種類の文字列が格納されているとします。 これを、半角カンマ+半角スペースでつないで書き出す(echo)にはどのような方法がありますか。 なお、最後の文字列の後ろには不要です。 ■書き出しイメージ aaa@example.com, bbb@example.com, ccc@example.com, ddd@example.com, eee@example.com

    • ベストアンサー
    • PHP
  • PHPによるページ移動なしの年齢確認ページ作成

    サイト構築に関する質問です。 いろいろ調べても分からなかったので、質問させていただきました。 今現在、PHPでサイトを構築しているのですが、 いわゆる年齢確認のページ(18歳以上ですか?「はい」「いいえ」のようなものです)を、 どのユーザーがどこにアクセスしてきたときにでも最初に表示させたいのですが、 方法がどうしてもわかりません。 例えば、サイトのドメインがexample.comだとしたら、 (1)example.com以下のどのページにアクセスしても、最初に同じ年齢確認のページを表示させる。 (2)「はい」が押された場合、ユーザーがブラウザを閉じるまでは、年齢確認のページは表示しない。 (3)ページごとに年齢確認のページに飛ばすのではなく、アクセスされたページのURLのまま年齢確認のページを表示する。 分かりづらくて申し訳ないのですが、例を挙げると以下のサイトのような使用です。 http://www.digiket.com/a/ (R-18指定サイトです。下位層の何処にアクセスしても、そのアクセスされたページで年齢確認が行われます。) (1)(2)はPHPでクッキーを使えば作れると思うのですが、 (3)がどう作っているのかが分かりません。(何処でもアクセスしたページで移動することなく年齢確認が表示される。) 全てのページにそのようなプログラムを組み込んでいるのでしょうか? 下手な文章で申し訳ありませんが、是非ご教授いただければと思います。

    • ベストアンサー
    • PHP
  • 他のクエリを保持したまま、ページ番号だけを変えたい

    検索ボックスに入力されたクエリを基に検索する、search.phpを作成しました。 queに格納されているキーワードを検索して、50件ずつ表示します。 このとき search.php?que=[検索キーワード]&cat=[検索カテゴリ]&page=1 で検索結果の1ページ目、 search.php?que=[検索キーワード]&page=2 で検索結果の2ページ目が表示されます。 ページ下部には 前へ 次へ とあり、それぞれページひとつ前、ページひとつ次のURLがあるのですが、このURLはクエリによって動的に変化します。 search.php?que=aaa&cat=abc&page=4 なら前へ:search.php?que=aaa&cat=abc&page=3 、 次へ:search.php?que=aaa&cat=abc&page=5 search.php?que=bbb?page=4 なら前へ:search.php?que=bbb?page=3 、 次へ:search.php?que=bbb?page=5 このように、それ以外のクエリを保持したまま、ページ番号だけを書き換えるにはどのようにすればいいのでしょうか。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • Movable Typeで複数カテゴリ横断的なカテゴリを作りたいのですが…

    Movable Type4.2でのサイト構築をつい最近試み始めた者です。 現在、複数カテゴリ横断的なカテゴリを作りたいと思っています。 例えば、 http://www.example.com/cat1/aaa.html http://www.example.com/cat2/bbb.html http://www.example.com/cat3/ccc.html というブログ記事があったとして、これらを別のカテゴリcat4に纏めて http://www.example.com/cat4/aaa.html http://www.example.com/cat4/bbb.html http://www.example.com/cat4/ccc.html といった感じです。 cat4内ではPrevNextInCategoryプラグインを使用して「前」「次」のナビゲーションを設置して、 cat4/aaa.html→cat4/bbb.html→cat4/ccc.html と誘導したいと考えています。 aaa.htmlの「新しいブログ記事を作成」ページでcat1とcat4の2つのカテゴリを選べばいいと思いきや、そのようにしてもaaa.htmlのhtmlファイルはメインのカテゴリとして選んだcat1でのみ生成され、cat4には生成されません。 こうしたcat4を実現させるにはどのようにすればいいのでしょうか? 宜しくお願い致します。

  • 最後の文字だけを抜き出したい

    Excelで、以下のように'/'で区切られた文字列があります。 /AAAAA/BBB /CCC /DDDD/EEE/F これから以下のように最後の文字のみを抽出したいのですが、どうすれば可能でしょうか? BBB CCC F よろしくお願いします。

  • mod_rewrite的なことをphpで実現させたいが空白ページが表示されてしまう

    www.example.com/ほげほげ にアクセスされたら、 example.com/ほげほげ へ urlをかきかえ、 さらに、 $_SERVER["REQUEST_URI"] がスラッシュで終わる(2個以上のスラッシュも考慮)ときは、これらのスラッシュをとりのぞいたurlへかきかえ、 そして、このurlへ301ステータスコードでリダイレクトさせる(ただし、get methodの場合に限る) というコードをphpで書いたのですが、 なぜか、urlは書き換わらず、空白のページが表示されてしまいます。 どこがいけないのでしょうか? お助けくださいませ。         if ($_SERVER["REQUEST_METHOD"] == "GET"){             #HTTP_HOST (exclude www.)             preg_match_all("/^(www\.)(.*)$/", $_SERVER["HTTP_HOST"],$matches_HTTP_HOST);             if ($matches_HTTP_HOST[1] != ''){                 $bWillBeRedirected = true;                 $strAfterRedirect_HTTP_HOST = $matches_HTTP_HOST[2];             }             else{                 $strAfterRedirect_HTTP_HOST = $_SERVER["HTTP_HOST"]             }             #REQUEST_URI (,which includes query string)             preg_match_all("/^(\/)(.*)(\/+)$/", $_SERVER["REQUEST_URI"],$matches_REQUEST_URI);             if ($matches_REQUEST_URI[3] != ''){                 $bWillBeRedirected = true;                 $strAfterRedirect_Request_URI = $matches_REQUEST_URI[1] . $matches_REQUEST_URI[2];             }             else{                 $strAfterRedirect_Request_URI = $_SERVER["REQUEST_URI"];             }             #redirect with 301 status code if needed             if($bWillBeRedirected){                 #Protocol                 if ($_SERVER["HTTPS"] == "on"){                     $strProtocol = "https";                 }                 else{                     $strProtocol = "http";                 }                 $url = $strProtocol . "://" . $strAfterRedirect_HTTP_HOST . $strAfterRedirect_Request_URI;                                                   header("HTTP/1.1 301 Moved Permanently");                 hearder(”Location: “.$url);                 header(”Connection: close”);             }         }

    • ベストアンサー
    • PHP
質問する