Asp.net 如何添加查询字符串以使用IIS7 Rewrite 2.0显示用户语言(?lang=es MX)?

Asp.net 如何添加查询字符串以使用IIS7 Rewrite 2.0显示用户语言(?lang=es MX)?,asp.net,iis-7,url-rewriting,web-config,iis-6,Asp.net,Iis 7,Url Rewriting,Web Config,Iis 6,我有一个网站Visual Studio/VB/ASP.NET 4.0,我用9种不同的语言对其进行了本地化,因此在我的Apps\u GlobalResources目录中有9个不同的.resx文件。这些语言非常有效,最终用户可以手动选择他们想要查看的语言 问题是: 例如,当用户位于主页上时,他们位于domain/default.aspx上。当他们切换到西班牙语-墨西哥语时,页面将切换到西班牙语-墨西哥语,但URL保持不变-domain/default.aspx 许多人建议我向最终用户显示一个查询字符

我有一个网站Visual Studio/VB/ASP.NET 4.0,我用9种不同的语言对其进行了本地化,因此在我的Apps\u GlobalResources目录中有9个不同的.resx文件。这些语言非常有效,最终用户可以手动选择他们想要查看的语言

问题是:

例如,当用户位于主页上时,他们位于domain/default.aspx上。当他们切换到西班牙语-墨西哥语时,页面将切换到西班牙语-墨西哥语,但URL保持不变-domain/default.aspx

许多人建议我向最终用户显示一个查询字符串。因此,我希望URL看起来像domain/default.aspx?lang=es MX或domain//es MX/default.aspx preferred


既然我所有的资源文件都已准备就绪,我可以通过II7重写工具来完成吗?如果是这样的话,有人能解释一下我该怎么做吗?我不熟悉谈判。谢谢你,我真诚地感谢你能提供的任何指导

您可以修改web.config文件,它将为您处理重写:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
    <rewrite>
        <rules>
            <rule name="rule1" stopProcessing="true">
                 <match url="^(.*)-htm-(.*)" />
                 <action type="Rewrite" url="{R:1}.php?{R:2}" />
            </rule>
            <rule name="rule2" stopProcessing="true">
                <match url="^(.*)/show-([0-9]+)([\-])?([0-9]+)?\.html" />
                <action type="Rewrite" url="{R:1}/show.php?itemid={R:2}&page={R:4}"  />
            </rule>
            <rule name="rule3" stopProcessing="true">
                <match url="^(.*)/list-([0-9]+)([\-])?([0-9]+)?\.html" />
                <action type="Rewrite" url="{R:1}/list.php?catid={R:2}&page={R:4}"  />
            </rule>
            <rule name="rule4" stopProcessing="true">
                <match url="^(.*)/show/([0-9]+)/([0-9]+)?([/])?" />
                <action type="Rewrite" url="{R:1}/show.php?itemid={R:2}&page={R:3}"  />
            </rule>
            <rule name="rule5" stopProcessing="true">
                <match url="^(.*)/list/([0-9]+)/([0-9]+)?([/])?" />
                <action type="Rewrite" url="{R:1}/list.php?catid={R:2}&page={R:3}"  />
            </rule>
            <rule name="rule6" stopProcessing="true">
                <match url="^([a-z0-9]+)\.co/(.*)" />
                <action type="Rewrite" url="company/index.php?homepage={R:1}&rewrite={R:2}"  />
            </rule>
            <rule name="rule7" stopProcessing="true">
                <match url="^(htm)/(.*)" />
                <action type="Rewrite" url="index.php?rewrite={R:2}"  />
            </rule>
        </rules>
    </rewrite>
</system.webServer>         
以下是你可以阅读的内容:

嗨,吉姆!谢谢你的时间和回答。我的站点在asp.NET4.0中,我实际上已经创建了一个重写映射,这样就不会显示.aspx扩展名。因此,当我进入我的联系人页面时,它只是domain.com/contact,但我真正想做的是找到一种方法来协商重写,这样当用户选择一种语言时,它就会显示在URL中。所以domain.com/contact?lang=ja-ja之类的。我非常感谢您抽出时间进行重新规划,但我认为我需要一个不同的解决方案,因为以这种方式修改我的web.config无助于实现我的目标。再次感谢,谢谢!Jason,也许你有一个登录页,用户可以在那里选择语言并将语言附加到查询字符串中?!如果不是这样,当用户选择任何语言时,可能会附加这样的信息。也许您正在寻找一种自动将此类信息附加到查询字符串中的方法?我不确定这样的事情是否存在。我的方法是首先检查语言信息的查询字符串,如果它不存在,可能会从会话中显示出来