我的情况如下:场地可以是多个类别的用户也可以在多个类别类型添加过滤器的一部分,所以我的网址,现在是这样的:处理在IIS重写规则的可选URL参数的动态数
/venues/beaches/boats/themeparks
(这将显示有海滩和船只和themeparks所有场馆)/venues/beaches/boats
/venues
等
因此,不同场地类型(海滩,船只,主题公园等)的数量既是动态的,也是可选的。我怎样才能设置我的重写规则:category
查询字符串参数保存所有不同的场地类型,或者最好是category
参数多次添加,如果没有提供venuetype,那么category
只会为空/空?
所以对于网址:/venues/beaches/boats/themeparks
我会得到这个重写URL:search.aspx?category=beaches&category=boats&category=themeparks
而对于网址:/venues
我会得到这个重写URL:search.aspx?category=
(或太细会:search.aspx
)
我现在只有这个:
<rule name="venue types">
<match url="^venues/([a-zA-Z0-9-+']+)$"/>
<action type="Rewrite" url="search.aspx?category={R:1}"/>
</rule>
更新
我去@Arindam纳亚克的以下建议。
我安装了https://www.nuget.org/packages/Microsoft.AspNet.FriendlyUrls.Core/并手动在App_Start
文件夹中创建了一个RouteConfig.vb
文件。我加了(作为测试):
Public NotInheritable Class RouteConfig
Private Sub New()
End Sub
Public Shared Sub RegisterRoutes(routes As RouteCollection)
Dim settings = New FriendlyUrlSettings()
settings.AutoRedirectMode = RedirectMode.Permanent
routes.EnableFriendlyUrls(settings)
routes.MapPageRoute("", "test", "~/contact.aspx")
End Sub
End Class
而在global.aspx.vb
我说:
Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)
RouteConfig.RegisterRoutes(RouteTable.Routes)
End Sub
当我去www.example.com/test
,它现在可以正确地重定向我contact.aspx。 (注意:URL重写 - 在web.config
或rewriteRules.config
文件,以便规则 - 优先于RouteConfig.vb
)
我几乎没有,所以这www.example.com/test
正确重定向到文件contact.aspx
但这www.example.com/test/boats/outside/more/fields/are/here
,抛出一个404错误:
更新2
我添加记录到routeConfig.vb
:
GlobalFunctions.Log("1")
Dim settings = New FriendlyUrlSettings()
GlobalFunctions.Log("2")
settings.AutoRedirectMode = RedirectMode.Permanent
GlobalFunctions.Log("3")
routes.EnableFriendlyUrls(settings)
GlobalFunctions.Log("4")
routes.MapPageRoute("", "test", "~/contact.aspx")
GlobalFunctions.Log("5")
而这些行全部被执行。现在发生了一些奇怪的事情: routeConfig.vb似乎只能执行一次。所以:
- 我构建我的应用程序。
- 我转到
/test
URL - 该行被记录和我的
contact.aspx
页面 - 我刷新/测试页,NO行被记录
而且我也试过到:
- 我构建我的应用程序。
- 我转到
/test/boats/outside/more/fields/are/here
URL - 该行被记录
- 我收到上述404错误
- 我刷新页面,没有什么再登录
如此看来routeConfig只会被击中一次(在applicationstart?上),然后再也没有命中。而对于要求/test/boats/outside/more/fields/are/here
它到达routeConfig.vb文件,但不显示contact.aspx
出于某种原因...
更新3
我发现,当我明确定义的路由,它的工作,像所以:
routes.MapPageRoute("", "test", "~/contact.aspx")
routes.MapPageRoute("", "test/123", "~/contact.aspx")
所以现在URL /test
和/test/123
工作,但不是动态的所有,我只是想匹配/test
然后获取FriendlyUrlSegments。
我不能发布的代码在网上,所以,如果有帮助,这是我的解决方案资源管理器:
我能做些什么?
你可以关注我的博客 - https://arindamnayak1.wordpress.com/2015/03/07/seo-friendly-url-routing-in-asp-net/,你可以使用'Request.GetFriendlyURLSegments' ,它会返回你的数组值,即'场所/ X/Y/Z'将会是'[x,y,z]',如果你需要更多的细节,我可以把它作为答案。 –
@ArindamNayak谢谢。是的,回答SO的建议方式总是要回答SO本身(外部网站可能会在未来取消)。所以是的,我很想在这里得到您的答案,并将其应用于我的场景:)再次感谢! – Flo
我已经发布我的建议作为答案。 –