サブドメインで存在しないはずのindex.phpが表示される場合
WordPressを利用していてメインのドメインを有効利用しようと、
サブドメインなどを活用することもありますが、
サブドメイン内のURLで存在しないディレクトリなはずなのに、
常にindex.phpが常に表示されて困惑することもあるかもしれません。
こんなキーワードで検索される方がおられるかはわかりませんがご紹介しておきます。
サブドメインで存在しないはずのindex.phpが表示される場合
まぁ、ちょっと考えれば当たり前のことで、
でも、検証なんかをしていると、あれ?あれ?あれ???と、
迷子になってしまいがちなのでちょっとご紹介しておきます。
例として当サイトドメイン「rensrv.com」の
サブドメインの「query.rensrv.com」を利用した例をご紹介します。
当サイトは「http://rensrv.com/」にアクセスすると、
サイトのトップページが表示されます。
WordPressで動作していますので実際のインストールディレクトリは別ですが、
パーマリンク設定を行った上で、サイトURLを「http://rensrv.com/」としています。
WordPressではパーマリンク設定を行うと、
サーバー上のトップディレクトリに対して自動的に.htaccessファイルが生成されます。
ただ、このままではトップページにindex.phpが存在しませんので表示されません。
そこで、自分でindex.phpをコピーして、
インストールディレクトリを指定する編集を行ってサイトを公開しているはずです。
そうした一連の手順を以下でご紹介しています。
そんなこんなで、ドメイン名でアクセスすると、
トップページが表示されるわけですが、
この状態でサブドメインを設定するとサブドメインでは意図しない動作をします。
まず、メインドメインの.htaccessには以下のように記載されているはずです。
1 2 3 4 5 6 7 8 9 10 11 |
# BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> # END WordPress |
さて、この記述は何をしてくれているかを、
まじまじと見たことはありますでしょうか。
詳細は以下で以前ご紹介しています。
ざっくり言うと、
ファイルもディレクトリも存在しない場合にはドメインルートのindex.phpを表示する
と、書かれています。
では、これがどうサブドメインで影響するかというと、
サブドメインのディレクトリ構成にあります。
一般的なサブドメインの構成とアクセス
メインのドメインとサブドメインのディレクトリ構成を図にすると、
以下のような感じになっていると思います。
メインのドメインのディレクトリの中に、
サブドメイン名のディレクトリが配置されているはずです。
尚、ここではサブドメインにはWordPressをインストールせず、
単なる検証用環境として、index.phpが配置されています。
また、適当なディレクトリとして「directory1」を作成しその中にもindex.phpが配置されています。
さて、では順にURLにアクセスしてみます。
まずはメインドメインのトップディレクトリです。
これは、普通に当サイトのトップページが表示されます。
次はサブドメインのルートにアクセスします。
この場合、サブドメインのルートに表示されているindex.php(②)が表示されています。
次はサブドメインの「directory1」にアクセスします。
この場合、directory1ディレクトリに配置されているindex.php(③)が表示されています。
存在しないディレクトリ・ファイルアクセス例
さて、では本題です。
存在しないディレクトリや存在しないファイル名を要求したらどうなるでしょう。
例えば以下のようなURLです。
これはどちらも存在していませんが、
実際にアクセスすると、ちゃんとページが表示されます。
どんなURLでアクセスしても、
存在しないページであれば常にindex.php(②)が表示されます。
ここでindex.php(①)が表示されていないのは、
テスト用のindex.phpが表示されていることで区別できます。
すべてサブドメインのルートのindex.phpが返されるわけです。
これは、メインドメインのルートに配置している.htaccess(WordPressによる記述)によって、
そのサブディレクトリであるサブドメインのルートに対しても、
WordPressが求めているURL転送が適用されています。
この挙動を理解していないと、
サブドメインで配置したファイルやディレクトリなどのアクセスが、
何故かすべて同じページに飛ばされてしまって困惑する結果になります。
気付いてしまえば簡単なことではありますが、
パニクっている時には、
なおさら気づけなかったりもしますので、ご紹介しておきます。
なおこうしたURL転送が引き継がれる挙動を、
サブドメインやサブディレクトリでは無効にしたい場合には、
以下でご紹介する方法が利用できます。
WordPressはWordPress Foundation の登録商標(第5049965号)です。
WordPressロゴ、アイコンその他のマーク等はWordPress Foundation の商標であり、
WordPress Foundation の著作物です。
WordPress.comはWordPress Foundation が管理運営を行うドメインならびにサービスの名称です。
WordPress.com、WordPress.net、WordPress.org、WordPress.tv、
WordPressFoundation.orgはWordPress Foundationが
管理運営を行なう正式なトップレベルドメインであるとともに、
WordPress Foundationが運営を行うサービスの名称です。
wordpressはFree Software Foundation, Inc.によってGPL2+でライセンスされています。
公開日: