web-dev-qa-db-ja.com

IIS7のサブディレクトリにURL書き換えルールが継承されないようにする

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=somethingsomethingに挿入して、クリーンなURLを取得します。非常にシンプルで、うまく機能します。

CMSで一般的であるように、バックエンドの破損を防ぐために、各サブディレクトリには<remove name="Clean URLs" />または<clear />そのweb.configで、ルールは継承されません。

どういうわけか現在のディレクトリのみにルールのスコープを制限することにより、子によって継承されるべきではないことを親ルールで指定する方法はありますか?何かのようなもの <rule name="Clean URLs" stopProcessing="true" inherit="no">は壮大です。

11
Rich Jenks

4.5時間グーグルで答えを見つけた!

http://runtingsproper.blogspot.co.uk/2010/04/solved-breaking-parent-webconfig.html

基本的に利用する

<location path="." inheritInChildApplications="false"> 
    <system.webServer>
        <!-- ... -->
    </system.webServer>
</location>
13
Rich Jenks

私は最近、同じような状況でこの問題に遭遇しました。しかし、rjenkinsからの回答は、親設定の継承に依存する仮想アプリケーションで問題を引き起こすようです。

書き換えルールの名前がわかっている場合は、次のようにします。

<rewrite>
  <rules>
    <remove name="RewriteNameToDisable" />
  </rules>
</rewrite>
6
Bryan Way