Url基于查询IIS asp.net重写

时间:2013-05-08 13:34:34

标签: asp.net url-rewriting

我这是第一次需要帮助。如何使用url rewrite 2.0创建代码以根据查询重写url。

我需要:

www.Example/Ekonomija/Ekonomija.aspx?Ekonomija=something

www.Example/Ekonomija/something

www.Example/Test2/Test2.aspx?Test2=something

www.Example/Test2/something

www.Example/Test3/Test3.aspx?Test3=something

www.Example/Test3/something

依旧......

需要使用网址重写解决方案:2.0

EDITED 我尝试....但我有问题第一个角色运作良好但第二个没有,可能查询字符串不是没有准确完成,不知道。

<rule name="RedirectUserFriendlyURL1" stopProcessing="true">
                <match url="^Ekonomija/Ekonomija\.aspx$" />
                <conditions>
                    <add input="{REQUEST_METHOD}" pattern="^POST$" negate="true" />
                    <add input="{QUERY_STRING}" pattern="^([^=&amp;]+)=([^=&amp;]+)$" />
                </conditions>
                <action type="Redirect" url="{C:1}/{C:2}" appendQueryString="false" />
            </rule>
            <rule name="RewriteUserFriendlyURL1" 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="Ekonomija/Ekonomija.aspx?{R:1}={R:2}" />
            </rule>
            <rule name="RedirectUserFriendlyURL2" stopProcessing="true">
                <match url="^Test2/Test2\.aspx$" />
                <conditions>
                    <add input="{REQUEST_METHOD}" pattern="^POST$" negate="true" />
                    <add input="{QUERY_STRING}" pattern="^([^=&amp;]+)=([^=&amp;]+)$" />
                </conditions>
                <action type="Redirect" url="{C:1}/{C:2}" appendQueryString="false" />
            </rule>
            <rule name="RewriteUserFriendlyURL2" 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="Test2/Test2.aspx?{R:1}={R:2}" />
            </rule>

1 个答案:

答案 0 :(得分:0)

它可能适用于第一个但它永远不会与第二个一起工作 为什么呢?

因为您有两个完全符合相同条件的规则:RewriteUserFriendlyURL1RewriteUserFriendlyURL2

在这种情况下,第二个永远不会执行,因为它按顺序处理,第一个将始终接管。

无论如何,我试图简化你的规则如下:

<rule name="Redirect rule" stopProcessing="true">
    <match url="^(Ekonomija/Ekonomija|Test2/Test2)\.aspx$" />
    <conditions>                                                        
        <add input="{REQUEST_METHOD}" pattern="^POST$" negate="true" />
        <add input="{QUERY_STRING}" pattern="^(\w+)=(\w+)$" />
    </conditions>                                            
    <action type="Redirect" url="{C:1}/{C:2}" appendQueryString="false" />
</rule>
<rule name="Rewrite rule" stopProcessing="true">
    <match url="^(Ekonomija|Test2)/(\w+)$" /> 
    <conditions>
        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
    </conditions>
    <action type="Rewrite" url="{R:1}/{R:1}.aspx?{R:1}={R:2}" />
</rule>

重定向仅在

时有效
  • 请求的网址为Ekonomija/Ekonomija.aspxTest2/Test2.aspx
  • 用于访问网址的方法不是POST
  • 查询字符串只有一个字母数字序列,后跟一个等号(=),后跟第二个字母数字序列

在这种情况下,我们使用查询字符串(first sequence/second sequence)中的后向引用重定向。

然后我们在

时使用重写规则
  • 请求的网址以EkonomijaTest2开头,后跟斜杠(/)并包含一个或多个字母数字字符
  • 请求的网址与文件路径或服务器上的目录
  • 不匹配

在这种情况下,我们使用来自请求的URL的后引用重写。