0

我第一次做这个需要帮助。如何使用 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

等等 ....

需要 url 重写的解决方案:2.0

编辑 我尝试....但我有问题第一个角色工作得很好,但第二个没有,可能查询字符串没有准确完成,不知道。

<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>
4

1 回答 1

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>

重定向仅在以下情况下有效

  • 请求的 url 是Ekonomija/Ekonomija.aspx或者Test2/Test2.aspx
  • 用于访问 url 的方法不是POST
  • 查询字符串只是一个字母数字序列,后跟一个等号 ( =),然后是第二个字母数字序列

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

然后我们让重写规则在什么时候起作用

  • 请求的 url 以Ekonomijaor开头Test2,后跟一个斜杠 ( /) 并在后面包含一个或多个字母数字字符
  • 请求的 url 与服务器上文件或目录的路径不匹配

在这种情况下,我们使用来自请求的 url 的反向引用进行重写。

于 2013-05-08T17:06:36.333 回答