CMSでクリーンなURLのURL書き換えを設定しており、web.configは次のようになっています。
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="Clean URLs" stopProcessing="true">
<match url="^([^/]+)/?$" />
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
</conditions>
<action type="Rewrite" url="?id={R:1}" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
基本的にはindex.php?id=something
をsomething
に挿入して、クリーンなURLを取得します。非常にシンプルで、うまく機能します。
CMSで一般的であるように、バックエンドの破損を防ぐために、各サブディレクトリには<remove name="Clean URLs" />
または<clear />
そのweb.configで、ルールは継承されません。
どういうわけか現在のディレクトリのみにルールのスコープを制限することにより、子によって継承されるべきではないことを親ルールで指定する方法はありますか?何かのようなもの <rule name="Clean URLs" stopProcessing="true" inherit="no">
は壮大です。
4.5時間グーグルで答えを見つけた!
http://runtingsproper.blogspot.co.uk/2010/04/solved-breaking-parent-webconfig.html
基本的に利用する
<location path="." inheritInChildApplications="false">
<system.webServer>
<!-- ... -->
</system.webServer>
</location>
私は最近、同じような状況でこの問題に遭遇しました。しかし、rjenkinsからの回答は、親設定の継承に依存する仮想アプリケーションで問題を引き起こすようです。
書き換えルールの名前がわかっている場合は、次のようにします。
<rewrite>
<rules>
<remove name="RewriteNameToDisable" />
</rules>
</rewrite>