

すでにWordPress(以下WP)がルートで運用されているレンタルサーバーに、マルチ・ドメインを追加して別サイトを運営する場合の.htaccess(mod_rewrite)の設定について、以前このような方法で暫定的に解決した気になっていました。
https://www.chaordic.co.jp/memorandum/chaordicdesign/40/
とりあえずこれでも動いていたのですが、しかし、この方法だと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
以前は、ルートの **.htaccess** だけで対応しようとしていましたが、その方法ではWPの書き換えに対応できそうにないので、マルチ・ドメイン配下にも **.htaccess** を置いて、二段階の対応とします。
### ルートの.htaccess
提示された **.htaccess** の設定を、マルチドメイン、WPの順に記述するだけでOKです。(※「<」「>」は全角です)
# -- マルチドメイン設定
# Main RewriteRule for multidomain.
<IfModule mod_rewrite.c>
RewriteCond %{HTTP_HOST} ^(jrep.st.keio.ac.jp)
RewriteCond %{REQUEST_URI} !^/(jrep.st.keio.ac.jp)/
RewriteRule ^(.*)$ /%{HTTP_HOST}/$1/ [L]
</IfModule>
# BEGIN WordPress
# "BEGIN WordPress" から "END WordPress" までのディレクティブ (行) は
# 動的に生成され、WordPress フィルターによってのみ修正が可能です。
# これらのマーカー間にあるディレクティブへのいかなる変更も上書きされてしまいます。
<IfModule mod_rewrite.c>
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]
</IfModule>
# END WordPress
### マルチドメインの.htaccess
そして、マルチドメインのディレクトリ配下に下記を記述した **.htaccess** を作ります。何をしているかというと、リライトエンジンをオフにして、
このディレクトリ配下で404エラーが発生した場合のリダイレクトを指示してあります。
RewriteEngine Off
ErrorDocument 404 /jrep.st.keio.ac.jp/404.html
この方がだんぜんスマートです。
2022-06-17 20:18:59
ソースコードは自由にお使いください。また、何らかの不利益が生じたとしても一切責任を負いません。