我正在尝试创建一个规则,它将从URL中获取子文件夹并将其转换为查询字符串值,例如:
如果我导航到此网址:http://www.example.com/myfolder
我想阅读http://www.example.com/default.aspx?folder=myfolder
这就是我要做的事情:
<rule name="Rewrite Language">
<match url="([a-z]{2})(.*)" />
<conditions logicalGrouping="MatchAll">
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
</conditions>
<action type="Rewrite" url="/default.aspx?code={R:2}" />
</rule>
但这不会返回完整的子文件夹值。我会说实话,我从这个网站的类似问题中偷了这个,我必须承认我真的不知道这一切意味着什么!
我可能会以错误的方式接近这个问题,我的问题是我不能确定子文件夹是什么,因为它是从一个随机的6个字符的字母数字值动态生成的。
非常感谢任何帮助。
大卫
答案 0 :(得分:2)
IIS管理器有一个GUI /向导界面,用于创建规则,这些规则通常比手动将规则输入web.config文件更快更容易。值得一试:IIS Manager -> select your site / application -> URL Rewrite -> Add Rule(s)
。
我认为以下规则可以帮到你:
<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="default.aspx?folder={R:1}" />
</rule>
基本上,“匹配网址”是regular expression,用于标识网址的一部分。在这种情况下,它捕获包含一个或多个字符的组(除了/),在URL的末尾有一个可选的/。然后,它会将网址重写为default.aspx?folder=
,然后重写匹配的值({R:1}
指的是第一个捕获的组,其中包含文件夹名称)。
如果您只有一个子文件夹名称(不是嵌套文件夹),这将有效。
您还可以添加另一个相反方向的规则,因此浏览到http://www.example.com/default.aspx?folder=myfolder
会导致用户看到http://www.example.com/myfolder
:
<rule name="RedirectUserFriendlyURL1" stopProcessing="true">
<match url="^default\.aspx$" />
<conditions>
<add input="{REQUEST_METHOD}" pattern="^POST$" negate="true" />
<add input="{QUERY_STRING}" pattern="^folder=([^=&]+)$" />
</conditions>
<action type="Redirect" url="{C:1}" appendQueryString="false" />
</rule>