1

さて、私たちのほとんどは、おそらく以下の標準ルールを使用して、URL の aspx 拡張子を削除しています。

<rule name="Remove">
      <!--Removes the .aspx extension for all pages.-->
      <match url="(.*)" />
      <conditions logicalGrouping="MatchAll">
        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
      </conditions>
      <action type="Rewrite" url="{R:1}.aspx" />
    </rule>

ただし、書き込みルールがピリオドを含む URL をキャッチしないようにルールを変更したいと思います。

誰かがhttp://www.domain.com/picture.jpgと入力しようとすると、 ルールはそれをキャッチしません。

幸いなことに、IsFile および IsDirectory 条件は、実際のファイルがルールにヒットするのを防ぎますが、誰かがサーバーに存在しないファイルを入力した場合はいつでも、ルールがそれをキャッチし、asp.net は次のようなことを行います:

http://www.domain.com/404error.aspx?aspxerrorpath=/picture.jpg.aspx

見つからないファイルがある場合はルールを通過しないようにしたいです。

基本的には、ドメイン名の後の URL にピリオドが見つかるたびに否定する条件を追加できるようにする必要があるだけです。ある種のREGEXが機能すると思います。私はそれを正しく機能させることができないようです。

4

1 に答える 1

0

次の解決策を思い付くことができました。

        <rule name="RewriteASPX" stopProcessing="true" enabled="true">
            <match url="(.*)" />
            <conditions logicalGrouping="MatchAll">
                <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
                <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
                <add input="{REQUEST_FILENAME}.aspx" matchType="IsFile" />
            </conditions>
            <action type="Rewrite" url="{R:1}.aspx" />
        </rule>     
于 2013-04-18T01:12:24.890 に答える