在 ASP.net 中为多语言重写 URL

Tom*_*len 5 asp.net multilingual url-rewriting

使用示例网址:

www.domain.com/contact-us
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

这是英语的重写规则(默认语言)

<rewrite url="^/contact-us(\?(.+))?$" to="~/Pages/Contact.aspx$1" processing="stop"/>
Run Code Online (Sandbox Code Playgroud)

我将如何修改这个/添加一个新规则来重写:

www.domain.com/jp/contact-us  
Run Code Online (Sandbox Code Playgroud)

到:

~/Pages/Contact.aspx?language=jp
Run Code Online (Sandbox Code Playgroud)

最好不必为每个内容页面的每种语言编写新规则!

更复杂的是,它需要匹配 IETF 语言标签。这些变化足够多,看起来像匹配它们的正则表达式将是一条艰难的路线:https : //en.wikipedia.org/wiki/IETF_language_tag

理想情况下,我需要从数据库中获取语言列表,并动态匹配语言标签字段。但我不知道如何做到这一点,因为我只写过静态规则。

The*_*a10 1

您有权访问.htaccess主目录中的文件吗?如果是这样,您可以通过编写以下内容来制定自动重写规则

Options +FollowSymLinks
RewriteEngine on
RewriteRule /(.*)/contact-us/ /Pages/Contact.aspx?language=$1
RewriteRule /contact-us/ /Pages/Contact.aspx?language=en
Run Code Online (Sandbox Code Playgroud)

让我解释:

之后RewriteRule,用户友好的 URL 位于左侧,此处/(.*)/contact-us/(.*)jp发生的位置。然后jp将其转置到右侧真实的URL上,这里/Pages/Contact.aspx?language=$1替换为$1.

输入网址:http://www.example.com/jp/contact-us
输出网址:http://www.example.com/Pages/Contact.aspx?language=jp

对于第二个模型RewriteRule,由于 URL 与http://www.example.com/contact-us/第一个模型不匹配,因此会http://www.example.com/Pages/Contact.aspx?language=en自动转换为。

请记住,该.htaccess文件必须位于根目录(旁边的Pages文件夹)中。否则你将不会得到想要的结果。