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


11

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

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

回答:



6

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

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

<rewrite>
  <rules>
    <remove name="RewriteNameToDisable" />
  </rules>
</rewrite>

2
それが私の最初の試みでしたが、すべてのサブディレクトリのweb.configにそれを配置する必要があり、それは常に実用的ではありません。私はそれがよりきれいであることに同意しますが、特にサブディレクトリ(たとえば、サブフォルダ内のcmsの別のインスタンス)に書き換えがある場合は、より多くの作業が必要です
リッチジェンクス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.