WordPressのURL転送をサブドメインで無効化する
WordPressが自動で.htaccessに対して指定してくるリダイレクト設定。
このリダイレクトがサブドメイン用のディレクトリに対しても、
存在しないURLを転送してしまうという不便さを解消するために、
サブドメインでリダイレクト設定を無効化する設定をご紹介します。
概要
WordPressのURL転送をサブドメインで無効化する
以前、WordPressをドメインルートで利用している環境の
サブドメイン(同一サーバ)のディレクトリに対して、
WordPressが記述した.htaccessに対してのURLリダイレクトが、
サブドメインでも有効になる件についてご紹介しました。
その為、サブドメイン上で存在しないURLにアクセスした場合にも、
サブドメインルートのindex.phpが自動的に表示されてしまったわけですが、
こうした挙動が邪魔になることもあります。
そんな時には特定のディレクトリではWordPress仕様のリダイレクトを無効にするといいでしょう。
上位ディレクトリに配置された.htaccessによるURL転送が、
サブディレクトリやサブドメインで邪魔になるような場合には、
サブディレクトリに配置したに.htaccess対して、以下のように記載しておくと
それ以下のディレクトリに対しては、URL転送が無効になります。
URL転送を無効化したいディレクトリ(サブドメイン)配下の
.htaccessに以下のように記述しています。(5~10行目は.htaccess公開用)
このパターンは本投稿の、
「RewriteEngine Off を記述した例」でご紹介しています。
1 2 3 4 5 6 7 8 9 10 |
<IfModule mod_rewrite.c> RewriteEngine Off </IfModule> # arrow .htaccess <Files ~ "^.*\.([Hh][Tt][Aa])"> order allow,deny allow from all satisfy all </Files> |
いやいや、WordPressの転送は無効にしたいけど、
その他には転送するURLがあるというような場合には、
新たに新しいURL転送条件を追記するだけで、上位のURL転送は無効化されます。
このパターンは本投稿の、
「別の転送条件のみを記述した例」でご紹介しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteCond %{REQUEST_URI} ^/newtrancefer/source.*$ RewriteRule ^.*$ http://query.rensrv.com/newtrancefer/distination/ [L] </IfModule> # arrow .htaccess <Files ~ "^.*\.([Hh][Tt][Aa])"> order allow,deny allow from all satisfy all </Files> |
記述による挙動の違いは以下でご紹介しています。
検証パターンの例
本投稿は、以下のパターンで検証しています。
<IfModule mod_rewrite.c></IfModule>のみ記述の例
上位ディレクトリのmod_rewriteによるURL転送を無効にする方法として、 以下の記述を検証します。
.htaccessに以下のように記述しています。(4~9行目は.htaccess公開用)
1 2 3 4 5 6 7 8 9 |
<IfModule mod_rewrite.c> </IfModule> # arrow .htaccess <Files ~ "^.*\.([Hh][Tt][Aa])"> order allow,deny allow from all satisfy all </Files> |
通常に存在するURLにアクセスを行います。
http://query.rensrv.com/ifmoduleonly/
存在しないURLにアクセスします。
この場合、WordPressのリダイレクトが有効なまま、サブドメインルートのindex.phpが表示されます。
http://query.rensrv.com/ifmoduleonly/notexist/
RewriteEngine Off を記述した例
上位ディレクトリのmod_rewriteによるURL転送を無効にする方法として、
以下の記述を検証します。
.htaccessに以下のように記述しています。(5~10行目は.htaccess公開用)
1 2 3 4 5 6 7 8 9 10 |
<IfModule mod_rewrite.c> RewriteEngine Off </IfModule> # arrow .htaccess <Files ~ "^.*\.([Hh][Tt][Aa])"> order allow,deny allow from all satisfy all </Files> |
通常に存在するURLにアクセスを行います。
http://query.rensrv.com/rewriteengineoff/
存在しないURLにアクセスします。
この場合、リダイレクト機能そのものが無効化され403 NotFound が返されます。
単純にリダイレクトを一切利用しないなら、こうした記述でもいいでしょう。
http://query.rensrv.com/rewriteengineoff/notexist/
別の転送条件のみを記述した例
上位ディレクトリのmod_rewriteによるURL転送を無効にする方法として、
以下の記述を検証します。
.htaccessに以下のように記述しています。(8~13行目は.htaccess公開用)
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteCond %{REQUEST_URI} ^/newtrancefer/source.*$ RewriteRule ^.*$ http://query.rensrv.com/newtrancefer/distination/ [L] </IfModule> # arrow .htaccess <Files ~ "^.*\.([Hh][Tt][Aa])"> order allow,deny allow from all satisfy all </Files> |
通常に存在するURLにアクセスを行います。
http://query.rensrv.com/newtrancefer/
存在しないURLにアクセスします。
この場合、リダイレクト機能そのものが無効化され403 NotFound が返されます。
この時点で、既にWordPressのURL転送が無効になっていることが確認できます。
http://query.rensrv.com/newtrancefer/notexist/
このケースでは新たなURL転送を記述していますので、
正しくリダイレクトされるかを確認します。
http://query.rensrv.com/newtrancefer/source/ にアクセスすると、
ttp://query.rensrv.com/newtrancefer/distination/ へ転送されます。
これによって新たに転送条件を記載した場合には、
上位ディレクトリの転送条件は無効化され、
新たに記載したURL転送のみが有効になることが分かります。
<IfModule mod_rewrite.c></IfModule>を省略し追記した例
これはおまけですが、
<IfModule mod_rewrite.c></IfModule>の 囲みを無くしたとしても
転送は当然ながら行われます。
内部的には無用な処理が増えているだけということになると思いますが。
転送を記述する場合
.htaccessに以下のように記述しています。(6~11行目は.htaccess公開用)
1 2 3 4 5 6 7 8 9 10 11 |
RewriteEngine On RewriteBase / RewriteCond %{REQUEST_URI} ^/newtrancefer-add/source.*$ RewriteRule ^.*$ http://query.rensrv.com/newtrancefer-add/distination/ [L] # arrow .htaccess <Files ~ "^.*\.([Hh][Tt][Aa])"> order allow,deny allow from all satisfy all </Files> |
通常に存在するURLにアクセスを行います。
http://query.rensrv.com/newtrancefer-add/
存在しないURLにアクセスします。
この場合、リダイレクト機能そのものが無効化され403 NotFound が返されます。
この時点で、既にWordPressのURL転送が無効になっていることが確認できます。
http://query.rensrv.com/newtrancefer-add/notexist/
このケースでは新たなURL転送を記述していますので、
正しくリダイレクトされるかを確認します。
http://query.rensrv.com/newtrancefer-add/source/ にアクセスすると、
http://query.rensrv.com/newtrancefer-add/distination/ へ転送されます。
これによって新たに転送条件を記載した場合には、
上位ディレクトリの転送条件は無効化され、
新たに記載したURL転送のみが有効になることが分かります。
転送を無効化する場合
これはRewriteEngine Offを1行だけ記述した場合も同じです。
存在するURLは通常通り表示されます。
http://query.rensrv.com/rewriteengineoffonly/
存在しないURLにアクセスします。
この場合、リダイレクト機能そのものが無効化され403 NotFound が返されます。
この時点で、既にWordPressのURL転送が無効になっていることが確認できます。
http://query.rensrv.com/rewriteengineoffonly/notexist/
単に1行を記述しただけで、上位からのURL転送の記述を無効化できます。
サブディレクトリに転送条件を追加したい問題
となると困る問題が出てきます。
サブドメイン(サブディレクトリ)に対して、
上位ディレクトリに記述されたURL転送(この場合WordPressによる)を、
サブディレクトリに引き継ぎつつ、サブディレクトリに新たに条件を追加したい場合です。
この場合、取れる選択肢は、
- サブディレクトリの.htaccessにも同様の内容を追記する。
- 上位ディレクトリの.htaccessにサブディレクトリの条件を記載する。
サブドメインでから見た場合、ルートのドメインは基本的に別物です。
http://rensrv.com/.htaccess に対して、
http://rensrv.com/query.rensrv.com/ディレクトリの
URL転送条件を記載するのも気持ちが悪いものです。
あまりこういう書き方はしないでしょう。
しかし、ちょっと見方を変えると、
サブドメインにWordPressをインストールしたとするならば、
どの道、http://query.rensrv.com/.htaccess が自動的に配置され、
WordPressによるURL転送の記述が追記されます。(重複記述になる)
基本的にはURL転送は、
ドメインなり、サブドメインなりの最上位に位置する.htaccessに対してのみ
記述し運用する形が、迷うこともなく無難でしょう。
サブドメインでURL転送が一切必要ない場合には、
RewriteEngine Off だけを記述して、
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+でライセンスされています。
公開日:
最終更新日:2018/06/02