• 解決済 heppoko

    (@heppoko)


    404ページの動作確認をしていたときに気づいたのですが、
    「http://XXXXX.com/」というURLの末尾に「/0(ゼロ)」をつけて表示をさせました。

    準備した404ページが表示されるものだと思ったら、トップページが表示されました。
    何だこれは、と。

    次に「/00」「/000」と試したら、404ページが表示されました。
    しかし「/0000」としたら、エラーが発生。
    いくつかのサイトで試したところ、真っ白になったり、
    どこかのページを引っ張ってきたものが表示されたりとさまざまでした。

    「/0」でトップが表示されるのだけはせめて回避したいのですが、
    手段がいっこうに見つからず苦戦しております。
    そもそもこれは一体何が起こっているのでしょうか?

    ご存じの方がいらっしゃいましたら、ご教示いただければ幸いです。
    よろしくお願いいたします。

7件の返信を表示中 - 1 - 7件目 (全7件中)
  • 手元で試してみると/0/はトップページ、0000は記事一覧ページ(固定トップでない場合トップ)が確認できました。

    /0000/0/0/の挙動から0000年0月0日としてパースされている?(パーマリンク設定の設定値の影響を受けるはずですね。)

    /0/は固定トップを使用していない場合のページ番号かも…

    Debug Bar で Query String を見てみると、

    「/0」は None
    「/00」は pagename=00
    「/000」も pagename=000
    「/0000」は year=0000

    と、なっていました。

    「/0」でトップが表示されるのだけはせめて回避したいのですが、

    「/0」はQueryが何も無いと解釈されているようなので、ちょっと難しいかもしれませんね。

    テストしていないのですが.htaccessで下記などはいかがですか?

    RewriteEngine on
    RewriteCond %{THE_REQUEST} ^/o$
    RewriteRule ^/0$ http://〜〜.jp/ [R=301,L]

    もしくは固定ページで0という名前を付与したページをわざと作り、
    ページテンプレートで404にジャンプさせるとか。

    関係ないかもしれませんが、投稿の編集画面でスラッグを 0 の一文字にすると、スラッグが(何も入力されなかった時と同様に)自動的に投稿タイトルそのままになりました。もしかすると文字列(一文字)の 0 を空文字列だと判定しているのかな?と勝手な想像をしています。

    モデレーター Daisuke Takahashi

    (@extendwings)

    ちらっとコアを確認したところ、なんかいたるところで、if( $slug )とかif( $query )みたいな条件分岐を書いてますね。

    これはコアにパッチ送ったらマージされそうなので、だれかチャレンジしてみるといいかもしれません。

    トピック投稿者 heppoko

    (@heppoko)

    お礼が大変遅くなってしまい申し訳ありません。
    その後、世にあるWordpressで作られたサイトをいくつか見て、
    同じようなことになっていたことを確認しました。
    その上で皆様の回答を拝見して、ひとまずのところは、
    様子をみることにしました。

    ちなみにkirig様、.htaccessを試したのですがダメでした。
    でもありがとうございました。

    皆様方の親切な対応に感謝いたします。
    重ね重ねありがとうございました。
    ひとまずトピックスを閉じさせていただきますね。

    解決済みとなっていますが、自分も0で表示されてしまうのが気になってしまったので…すみません、横から失礼いたします。

    RewriteCond %{REQUEST_URI} ^/0/?$
    RewriteRule ^0/?$ http://example.com/ [R=301,L]
    

    THE_REQUESTではなくREQUEST_URIから分岐させてあげるといいのではないかと思います。

7件の返信を表示中 - 1 - 7件目 (全7件中)
  • トピック「URLの末尾に「/0(ゼロ)」をつけたらトップが表示される」には新たに返信することはできません。