【发布时间】:2015-08-23 18:33:31
【问题描述】:
使用示例网址:
www.domain.com/contact-us
在English 中呈现。本网站还支持一组其他语言:
www.domain.com/es/contact-us
www.domain.com/jp/contact-us
www.domain.com/de/contact-us
www.domain.com/pt/contact-us
这是英语的重写规则(默认语言)
<rewrite url="^/contact-us(\?(.+))?$" to="~/Pages/Contact.aspx$1" processing="stop"/>
我将如何修改/添加新规则以重写:
www.domain.com/jp/contact-us
收件人:
~/Pages/Contact.aspx?language=jp
最好不必为每个内容页面的每种语言编写新规则!
为了使事情复杂化,它需要匹配 IETF 语言标签。这些变化很大,看起来像匹配它们的正则表达式将是一条困难的路线: https://en.wikipedia.org/wiki/IETF_language_tag
理想情况下,我需要从数据库中获取语言列表,并即时匹配语言标签字段。但我不知道该怎么做,因为我只写过静态规则。
【问题讨论】:
-
既然要连接数据库,就不能自己写HTTP模块(基于HttpContext.RewritePath方法)吗?
-
@SimonMourier 任何好的教程,你可以链接我来告诉我如何做到这一点?我看了看,发现有点混乱!
-
@SimonMourier 我实际上已经得到了一个模块来工作,当你给它 url
/de/contact-us它会给出/contact-us?lang=de但RewritePath需要一个物理路径,这意味着它看起来像我应该在这个模块中写下我所有的 url 重写规则吗? -
@SimonMourier 对所有的 cmets 感到抱歉,但这是:pastebin.com/HntCsbdF 沿着正确的路线吗?
-
是的,正是这个想法。少数 cmets:为了健壮性,您想在各种环境中对其进行测试(iis、iisexpress?加载了标准应用程序和大量自定义模块,例如 MVC,看看您的代码是否与其他扩展程序混淆等)。静态文件的检查也有点幼稚:-),但对于您的上下文可能就足够了。注意:您可以使用 Server.MapPath 从 url 获取物理路径。
标签: asp.net url-rewriting multilingual