2013-01-16 72 views
0

我试图创建一个规则会从URL中的子文件夹,将其转换成例如查询字符串值: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个字符的字母数字值动态生成的。

任何帮助将非常感激。

大卫

回答

2

IIS管理器中提供了创建我通常会发现更快,更容易比手动输入规则到web.config文件的规则GUI /向导界面。值得检查: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> 

基本上,“匹配URL”是一个regular expression,用于识别URL的一部分。在这种情况下,它捕获一个包含一个或多个字符的组(在/中除外),并在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=([^=&amp;]+)$" /> 
    </conditions> 
    <action type="Redirect" url="{C:1}" appendQueryString="false" /> 
</rule> 
+0

感谢您的代码。我将这添加到标记之间的web.config中,并且出现404错误。另外,当试图通过IIS管理器访问URL ReWrite GUI时,它会生成一个错误:执行此操作时发生错误。详细信息:文件名:\\?\ c:\ inetpub \ wwwroot \ lnk.qa \ web.config。错误: –

+0

我必须添加我在导航到http://www.example.co.uk/myfolder时遇到了404错误 –

+0

对不起,延迟回到您身边......也许您已将它添加到您的web.config文件中在错误的水平?我的例子应该坐在下面的嵌套: