WordPressをマルチサイト化するときに、よく間違えて「HTTP ERROR 500」になること

マルチサイト化するときに、.htaccessにコードをコピペする手順がありますよね。

あそこで、ハマるですよ。

これを間違えると、「HTTP ERROR 500」になりますね。

WordPressの説明は、「次の内容を /home/userid/www/wp/ にある .htaccess ファイルへ追加して、他の WordPress ルールを置き換えてください:」なんですよね。

「 .htaccess ファイルへ追加」って書いてるから、既存の.htaccess の最後に、コピペして追加しちゃううですけど、.htaccessの状態によっては、コピペして追加ではなくて、置換をする必要があります。

「.htaccessの状態によって」っていうのは、WordPressの.htaccessはWordPressが自動で生成する部分があるんですよ。なので、いつも同じ状態とは限らないからですね。

マルチサイト化するときに、コピペーするコードって、これですよね。

RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]

# add a trailing slash to /wp-admin
RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) $2 [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L]
RewriteRule . index.php [L]

そんで、既存の.htaccessを開いてみると、以下のように、「RewriteEngine On」とか「RewriteRule 」とかって、コピペするコードと重複してますよね?

# 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の「# BEGIN WordPress」と「# END WordPress」の中にある「<IfModule mod_rewrite.c>」から「</IfModule>」までを消去して、コピペ元のコードを「# END WordPress」の下に貼り付けるようにしています。

「# BEGIN WordPress」中に貼ると、WordPressに上書きされるみたいなことが書いているので、念のために、外に貼り付けてます。