keyboard_arrow_up
WordPressサイトの下層でマルチドメインを運営する際の.htaccessの設定
visibility_off プライベートURLを表示
[このエントリーに書いた方法よりいい方法があったのでコチラの方法をお試しください](https://www.chaordic.co.jp/memorandum/chaordicdesign/49/) すでにWordPress(以下WP)がルートで運用されているレンタルサーバーに、マルチ・ドメインを追加して別サイトを運営しようとした時、ちょっとしたトラブルに見舞われました。これはその時のメモと、暫定的な解決方法です。 このサーバーでは、マルチ・ドメインのルートを親ドメインの下につくらなければなりませんでした。つまり、親ドメインのWP用 **.htaccess設定** がマルチ・ドメインにも影響を及ぼしていたのです。 仮に **domain.com** を親ドメイン、 **sub.domain.com** をマルチ・ドメインとすると、ディレクトリの構成はこうなります。 home/ (domain.com)   .htaccess (WPの.htaccess )   index.php   wp/ (WPのディレクトリ)   sub.domain.com/     .htaccess (マルチ・ドメインの.htaccess )     index.html ##### WordPress用の.htaccess まず、WPの.htaccessを見ていきます。 # BEGIN WordPress RewriteEngine On RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] # END WordPress <IfModule mod_rewrite.c>はmod_rewriteが使用できる環境を分岐させるもので、その下3行は基本的な設定となりますので、**WPのリライト設定** を抜き出すと以下になります。 # -- WPのリライト設定 RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] ##### マルチ・ドメイン用の.htaccess 次にマルチ・ドメイン用の.htaccessを見ていきます。 これは、今回使用したレンタル・サーバーで、マルチ・ドメインを設定した際に設置するものとして提示されたものです。 # Enable RewriteEngine. RewriteEngine On # -- マルチ・ドメインのリライト設定 RewriteCond %{HTTP_HOST} ^(sub.domain.com) RewriteCond %{REQUEST_URI} !^/(sub.domain.com)/ RewriteRule ^(.*)$ /%{HTTP_HOST}/$1/ [L] ##### 動いた.htaccess 結果、それなりに動いたのは下記の設定となりました。 マルチ・ドメインの.htaccessは削除して、ルートの.htaccessひとつにまとめてあります。 もともとあった **WPの.htaccess** に **マルチ・ドメイン用の.htaccess** を追加して一つにまとめました。肝心なのは、**マルチ・ドメインのリライト設定** を **WPのリライト設定** より先に置くこと。 RewriteRule ~[L]の **[L]** は、その **RewriteRule** が実行されたらそこで終了を意味します。その後の設定はすべてキャンセルされますので、順番が逆だと、より広範囲なWPのリライト設定が先に実行され、サブドメインのリライト設定に届かないことがでてきてしまうわけです。 RewriteEngine On RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] RewriteBase / # -- マルチ・ドメインのリライト設定 RewriteCond %{HTTP_HOST} ^(sub.domain.com) RewriteCond %{REQUEST_URI} !^/(sub.domain.com)/ RewriteRule ^(.*)$ /%{HTTP_HOST}/$1/ [L] # -- WPのリライト設定 RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] ##### (追記)404エラーの処理 ただし、このままだとマルチ・ドメイン配下において404エラーが発生した場合、WPの404ページにリダイレクトしてしまうことがわかりました。その対処は以下のようにしました。 RewriteEngine On RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] RewriteBase / # -- マルチ・ドメインのリライト設定 RewriteCond %{HTTP_HOST} ^(sub.domain.com) RewriteCond %{REQUEST_URI} !^/(sub.domain.com)/ RewriteRule ^(.*)$ /%{HTTP_HOST}/$1/ [L] # -- WPのリライト設定 RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} !(^/sub.domain.com/) #←除外 RewriteRule . /index.php [L] ErrorDocument 404 /sub.domain.com/404.html #←404リダイレクト 追加したのは「#←除外」と「#←404リダイレクト」の箇所です。 WPのリダイレクトがなされる直前に、その処理から指定のディレクトリを除外する命令を付け足しています。 そして最後に、これまでの命令から漏れたリクエストが404エラーとして指定ページ(/sub.domain.com/404.html)にリダイレクトされるようになっています。
ソースコードは自由にお使いください。また、何らかの不利益が生じたとしても一切責任を負いません。
このエントリーについてのお問い合わせ、お仕事のご相談やご依頼など mail_outline
keyboard_arrow_down
settings_ethernet
insert_photo
create
done