[WordPress]Windowsサーバー(IIS)でマルチサイトをするときのweb.configの設定

仕事でWindowsサーバーでWordPressを構築する機会があったので備忘まで。

IIS(Microsoft Internet Information Services)で、WordPressのマルチサイトを使うときは「web.config」を触ります。

Apacheでいうと、.htaccessと似たような動作をする構成ファイルですね。

 

WordPressをインストールして、マルチサイト機能をONにすると次のように「web.config」を修正しろと、WordPressが提示してきました。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name="WordPress Rule 1" stopProcessing="true">
                    <match url="^index.php$" ignoreCase="false" />
                    <action type="None" />
                </rule>
                <rule name="WordPress Rule 2" stopProcessing="true">
                    <match url="^([_0-9a-zA-Z-]+/)?wp-admin$" ignoreCase="false" />
                    <action type="Redirect" url="{R:1}wp-admin/" redirectType="Permanent" />
                </rule>
                <rule name="WordPress Rule 3" stopProcessing="true">
                    <match url="^" ignoreCase="false" />
                    <conditions logicalGrouping="MatchAny">
                        <add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" />
                        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="false" />
                    </conditions>
                    <action type="None" />
                </rule>
                <rule name="WordPress Rule 4" stopProcessing="true">
                    <match url="^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*)" ignoreCase="false" />
                    <action type="Rewrite" url="wordpress/{R:1}" />
                </rule>
                <rule name="WordPress Rule 5" stopProcessing="true">
                    <match url="^([_0-9a-zA-Z-]+/)?([_0-9a-zA-Z-]+/)?(.*.php)$" ignoreCase="false" />
                    <action type="Rewrite" url="wordpress/{R:2}" />
                </rule>
                <rule name="WordPress Rule 6" stopProcessing="true">
                    <match url="." ignoreCase="false" />
                    <action type="Rewrite" url="index.php" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>

 

大事なのは、<rewrite>〜</rewrite>の記述です。

ちなみに、「WordPress Rule 4」と「WordPress Rule 5」の中で、「url=”wordpress/{R:1}」と「url=”wordpress/{R:2}」の「wordpress」の部分は、「wordpress」ディレクトリ配下にWordPressをインストールした時です。この部分はインストールディレクトリ名によって変わります。

                <rule name="WordPress Rule 4" stopProcessing="true">
                    <match url="^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*)" ignoreCase="false" />
                    <action type="Rewrite" url="wordpress/{R:1}" />
                </rule>
                <rule name="WordPress Rule 5" stopProcessing="true">
                    <match url="^([_0-9a-zA-Z-]+/)?([_0-9a-zA-Z-]+/)?(.*.php)$" ignoreCase="false" />
                    <action type="Rewrite" url="wordpress/{R:2}" />
                </rule>

 

さて、先程の記述にweb.configを編集すると動作はするのですが、ユーザーを追加する時など、時折エラーが発生してしましました。

ググってみたら同じ状態になっている人を発見(どのページが失念しました。すみません)。

色々調べているうちに出来たのが次の記述。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
 <system.webServer>
 <rewrite>
 <rules>
 <rule name="WordPress Rule 1" stopProcessing="true">
 <match url="^index.php$" ignoreCase="false" />
 <action type="None" />
 </rule>
 <rule name="WordPress Rule 2" stopProcessing="true">
 <match url="^([_0-9a-zA-Z-]+/)?files/(.+)" ignoreCase="false" />
 <action type="Rewrite" url="wp-includes/ms-files.php?file={R:2}" appendQueryString="false" />
 </rule>
 <rule name="WordPress Rule 3" stopProcessing="true">
 <match url="^([_0-9a-zA-Z-]+/)?wp-admin$" ignoreCase="false" />
 <action type="Redirect" url="{R:1}wp-admin/" redirectType="Permanent" />
 </rule>
 <rule name="WordPress Rule 4" stopProcessing="true">
 <match url="^" ignoreCase="false" />
 <conditions logicalGrouping="MatchAny">
 <add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" />
 <add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="false" />
 </conditions>
 <action type="None" />
 </rule>
 <rule name="WordPress Rule 5" stopProcessing="true">
 <match url="(^[_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*)" ignoreCase="false" />
 <action type="Rewrite" url="wordpress/{R:2}" />
 </rule>
 <rule name="WordPress Rule 6" stopProcessing="true">
 <match url="^([_0-9a-zA-Z-]+/)?(.*.php)$" ignoreCase="false" />
 <action type="Rewrite" url="wordpress/{R:2}" />
 </rule>
 <rule name="WordPress Rule 7" stopProcessing="true">
 <match url="." ignoreCase="false" />
 <action type="Rewrite" url="index.php" />
 </rule>
 </rules>
 </rewrite>
 </system.webServer>
</configuration>

これで無事、動作するようになりました。

この記事を書いた人:

ナカシマ

北区赤羽在住のWEBデザイナー兼エンジニア。インターネット、WordPress、本・漫画、音楽が大好き。妻と猫と暮らすアップル信者。

BLOG: 着ぐるみ追い剥ぎペンギン