0

次のようなアプリケーション内にフォルダー構造を設定しています。

  • c:\inetpub\wwwroot\contoso\public
  • c:\inetpub\wwwroot\contoso\secured

次の URL をこれらのフォルダー構造にマップしたいと考えています。

サーバーにApplication Request Routing バージョン 2がインストールされています。私の思考プロセスは、これらのようなマッピングを行うためのいくつかの書き換えルールを構築できるということでした...

<rewrite>
    <rules>
        <rule name="Rewrite pub page to aspx" stopProcessing="false">
            <match url="^([a-z0-9/]+)$" ignoreCase="true" />
            <conditions>
                <add input="public\{REQUEST_FILENAME}.aspx" matchType="IsFile" ignoreCase="true" />
            </conditions>
            <action type="Rewrite" url="public/{R:1}.aspx" />
        </rule>
        <rule name="Rewrite sec page to aspx" stopProcessing="false">
            <match url="^([a-z0-9/]+)$" ignoreCase="true" />
            <conditions>
                <add input="secured\{REQUEST_FILENAME}.aspx" matchType="IsFile" ignoreCase="true" />
            </conditions>
            <action type="Rewrite" url="secured/{R:1}.aspx" />
        </rule>
        <rule name="Rewrite 404 page to aspx" stopProcessing="true">
            <match url="^([a-z0-9/]+)$" ignoreCase="true" />
            <conditions>
                <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true"/>
                <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true"/>
            </conditions>
            <action type="Rewrite" url="public/default.aspx" />
        </rule>
    </rules>
</rewrite>
<location path="secured"><system.web><authorization><deny users="?"/></authorization></system.web></location>
<location path="public"><system.web><authorization><allow users="?,*"/></authorization></system.web></location>

私の考えでは、ファイルがパブリックフォルダーに存在するかどうかを確認し、存在する場合はそのファイルを書き換えるという条件を伝えていました。そうしないと、セキュリティで保護されたフォルダーにファイルが存在するかどうかを確認し、存在する場合はそのファイルを書き換えます。そうしないと、「他のすべてをキャッチする」ルールによってキャッチされ、デフォルトのページに戻るだけです。

しかし、これは私の期待どおりに機能していません...常にフォルダーに書き換えることはできますが、ファイルが存在するかどうかを確認するために起動する条件を取得できません。

助言がありますか?

4

1 に答える 1

0

IIS 内でトレースをオンにし、それらのログを調べたところ、{REQUEST_FILENAME} がこの状況で使用する変数として不適切であることがわかりました。関連するログ情報は次のとおりです。

Input secured\{REQUEST_FILENAME}.aspx 
ExpandedInput secured\c:\inetpub\wwwroot\contoso\myaccount.aspx
MatchType 1 
Pattern
Negate false 
Succeeded false 
MatchType IsFile

そこで、サーバー変数リストのドキュメントを調べたところ、APPL_PHYSICAL_PATH 変数を見つけることができ、入力を次のように変更しました。

        <rule name="Rewrite sec page to aspx" stopProcessing="false">
            <match url="^([a-z0-9/]+)$" ignoreCase="true" />
            <conditions>
                <add input="{APPL_PHYSICAL_PATH}secured\{R:1}.aspx" matchType="IsFile" ignoreCase="true" />
            </conditions>
            <action type="Rewrite" url="secured/{R:1}.aspx" />
        </rule>

そして出来上がり、マッチングが始まりました。これが将来誰かに役立つことを願っています。

于 2013-05-08T17:27:57.040 に答える