多くのウェブサーバーでは、ファイルが見つからない場合には自動的にURLの終わりに「/」(スラッシュ)を付けて表示を試みるようになっているので、http://example.com/wp にアクセスをした時、「wp」というファイル名が見つからない場合には、結果的に「wp/」としてページが表示されることになります。
固定ページで「wp」を作る。その動作がどうなるかしら。
「/」(スラッシュ)のあり・なしとでは、ウェブサーバーが探しに行くファイルが異なります。名前の後ろにスラッシュが付いていると「ディレクトリ」を表し、後ろにスラッシュが付いていないと「ファイル」を表します。
なので、一見同じように見えるURLも「/」(スラッシュ)のあり・なしとでは全く別のページとして扱われることになります。
.htaccess ファイルの記述を注意されるとよいでしょう。
1 と 2 は、ちょっと違う機構です。
1 は、WordPress の仕様であって、何も手を加えていなければ、全てのインストールで同じ状態になるはずです。
WordPress は、siteurl、home というオプションデータを持っていて、prefix_options というデータベース・テーブルにその値を保存しています。テンプレート・タグの site_url() や home_url() を使うと、内部で get_option(‘siteurl’) や get_option(‘home’) を呼び出して、テーブルからデータを読み込みます。この URL は、保存するときに必ず最後のスラッシュを削除した形に整形されます。ですから、設定->一般で、スラッシュを追加しても変更することはできません。
Apache などの DocumentRoot の指定方法にならっているような感じですね。ルートはスラッシュなし、それより後は、GET 要求でつけるパスと同じように扱えということではないかな。ルートへの要求は GET / HTTP/1.0
だから。
保存されたデータは、しかるべき関数を使えば、変更することもできますが、お勧めはしません。WordPress 内部でも、プラグインやテーマでもさまざまに使われているからです。まあ、二重スラッシュが飛び交うだけといえば、そうなのですが… 気持ち悪いですよね。
テンプレート・タグは、オプションの引数を受け取ることができて、指定の仕方によって、下のような違いがあります。
site_url() => http://example.com/wp
site_url('/') => http://example.com/wp/
site_url('/somepage/') => http://example.com/wp/somepage/
site_url('anotherpage/') => http://example.com/wp/anotherpage/
site_url('yetanotherpage') => http://example.com/wp/yetanotherpage
こういう仕様なわけです。これが WordPress のあちこちで使われています。
2 の方は、サーバ設定によって、振る舞いが変わることがありますが、通常は以下のようになります。
ブラウザから http://example.com/wp
へ GET 要求を出すと、wp というディレクトリがある場合、サーバは、http://example.com/wp/
へのリダイレクトを送信します。Apache、Nginx ともにこれがデフォルトの振る舞いのはずです。そして、http://example.com/wp/index.php
があれば、PHP (または、php モジュール) が実行されて、WordPress が動き出します。ということは、この場合、最後のスラッシュをつけているのは、Apache や Nginx であって、WordPress がつけてるわけじゃありません。
どうしてもこの動作を変更したいとうことなら、止めはしませんが、お勧めもしません。Apache なら、mod_dir を、Nginx なら、設定ファイルの server セクションの記述を調べてみてください。うまくいかない場合は、Apache または Nginx のフォーラムかメーリングリストでお願いします。
さて、お使いのプラグインですが、http://example.com/wp/
を送信するのが本当は正しいやり方だと思います。サーバのリダイレクトとブラウザとのやり取りは一瞬で終わるので、どうということはないですが (ディレクトリには必ずスラッシュをつけろ、と昔は言われましたけど)、サーバに余計な仕事をさせないことは確かだからです。WordPress は仕様どおり動いているので、まったく問題ありません。
맹조さん、kjmtshさん、ご回答ありがとうございます!
なるほど、あまりにも一瞬なのでわかりませんでしたが、サーバーがご丁寧にリダイレクトしてくれていた訳ですね。
ルートURLの場合はリダイレクトしないですし(私のサーバーは)、色々ネットにある「サブディレクトリのWordPressをルートURLにする方法」を見てもスラッシュが付いていなかったので、混乱していました。ルートURLとサブディレクトリの挙動は違うようですね。
WordPress側がスラッシュ付きを標準にしてくれたら良いような気がしていたのですが、ルートの扱いなどなどでそういう仕様になっているのですね。1について詳しく説明していただいてよくわかりました。ルートURLの場合にスラッシュが付いても困りますし、なるほどです。
スラッシュは無くても良いかと思っていたのですが、サーバー側がそうすると言うならそれに従います。
プラグイン側で、スラッシュが付くようにしてみようと思います。
基本はサブディレクトリにはスラッシュが付く!と覚えておきます。