Umbracoは、サイトのドキュメントルートにインストールする必要がありますが、Umbracoをドキュメントルートにインストールすると、同一サイトのバーチャルディレクトリやサブフォルダにインストールしてあるアプリケーションに下の図のようなエラーが発生して動作しなくなります。エラーが発生する原因は、構成ファイルWeb.configがすべての子ディレクトリに適用されるため、不要なものまでが子ディレクトリに適用されるためです。なお、以下の修正は、IIS7の統合モードを使用している場合で、それ以外のモードを使用している場合は、system.webの修正になります。
参考:
web.config and other IIS applications
入れ子になった ASP.NET アプリケーションを動作させる!
修正方法1 inheritInChildApplications属性を使用して継承をしないようにする
ドキュメントルートのWeb.configのsystem.web及びsystem.webServerセクションを以下のように修正してinheritInChildApplications属性をfalseにして、子ディレクトリへの承継をしないようにする。
<location path=”.” inheritInChildApplications=”false”>
<system.web>
…
</system.web>
</location>
<location path=”.” inheritInChildApplications=”false”>
<system.webServer>
…
</system.webServer>
</location>
なお、ActiveWebでは、各バーチャルディレクトリを作成すると生成されるWeb.configの<system.webServer><handlers>…</handlers></system.webServer>の内容については、通常は承継されるので省略できますが、この方法を使用すると承継されなくなるので省略することができなくなります。
修正方法2 clear要素または、remove要素を使用して継承した参照を削除
各バーチャルディレクトリのWeb.configについて、system.webServerセクションのmodulesセクションの承継をclear要素を追加して承継を削除します。ActiveWebでは、Clear要素でうまくいかず、remove要素で、UrlRewriteModule、umbracoRequestModule、viewstateMoverModule、umbracoBaseRequestModuleの4つもモジュールを指定してはずすとうまく動作しました。なお、アプリケーションにより他のモジュールについても承継を削除する必要があります。
<system.webServer>
<modules>
<clear />
————–
————–
</modules>
</system.webServer>
以上でうまくいかない場合
<system.webServer>
<modules>
<remove name=”UrlRewriteModule” />
<remove name=”umbracoRequestModule” />
<remove name=”viewstateMoverModule” />
<remove name=”umbracoBaseRequestModule” />
—————————————————-
—————————————————-
</modules>
</system.webServer>