1

IIS サーバーに IIS Url Rewrite 2.0 をインストールしたばかりですが、一部の書き換えが正しく実行されないことに少し問題があります。これが私の問題です:

すべてのファイルを次のように書き換えたい:welcome.aspx>welcome/、about.aspx>about/など。

<rule name="Remove extension with slash" 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="{R:1}.aspx" appendQueryString="true" />
</rule>

これまでのところ動作しています..しかし、次のような URL を実行したときに実行したい default.aspx のクエリ文字列関数もいくつかあります: mysite.com/logout/ これは実際には mysite.com/default.aspx?action= ですこのルールによるログアウト:

<rule name="Friendly URL" 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="default.aspx?action={R:1}" appendQueryString="true" />
</rule>

ただし、存在しない logout.aspx ファイルを検索するため、2 番目のルールは実行されません。これは、default.aspx のクエリ文字列関数の形式でのみです。

両方を達成する方法はありますか?

::::::::::: 編集 ::::::::::::

私は一日中試しています..次の設定にかなり近づきました:

<rule name="Remove ext" stopProcessing="true">
    <match url="^([^/]+)/?$" />
    <conditions>
        <add input="{REQUEST_FILENAME}.aspx" matchType="IsFile" negate="false" />
        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
    </conditions>
    <action type="Rewrite" url="{R:1}.aspx" appendQueryString="true" />
</rule>

<rule name="Default actions" 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="default.aspx?action={R:1}" appendQueryString="true" />
</rule>

<rule name="Other files with querystrings" 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="{R:1}.aspx?action={R:2}" appendQueryString="true" />
</rule>

ほとんどすべてが機能します

user.aspx > ユーザー

default.aspx?action=logout > ログアウト

user.aspx?action=コメント > ユーザー/コメント

それを台無しにするのは、ユーザーの後にスラッシュを追加した場合だけです。default.aspx ルールに応答し、クエリ文字列として機能します。これは意図したものではありません。手がかりはありますか?

4

1 に答える 1

1

ページ名であると想定されているものと、パラメーターとして意図されているものとをシステムが区別することをどのように期待できますか?

ここで MVC サイトが行うこと (URL システムはそれに非常に似ています) は、何が何であるかを明確に定義することです。あなたの場合、最初の部分 (ようこそ、約) をビュー (ページ) 部分として使用し、メソッドを表す別のレベルを追加する必要があります。要するに、 /default/logout を使用して、これを次のように書き換えます

{R:1}.aspx?action={R:2}

本当にあなたが言ったように URL を表示したい場合 (/default 部分のない /logout)、URL を個別に書き換えるルールを追加する (OR | と一致) か、Default.aspx にリダイレクトする Logout.aspx を追加することができます。 ?action=logout - しかし、それは醜いでしょう。クリーンなソリューションを求めてください。

于 2012-12-19T17:57:48.637 に答える