Regex IIS Url重写器:重定向语言代码
我用不同的语言为客户创建了一个网站,URL看起来像Regex IIS Url重写器:重定向语言代码,regex,iis,url-rewriting,Regex,Iis,Url Rewriting,我用不同的语言为客户创建了一个网站,URL看起来像 https://www.example.com/en-US/Something/More https://www.example.com/de-DE/Etwas/Mehr https://www.example.com/fr-FR/Quelquechose/plus 等等 问题是:客户机现在需要像/en/、/de/和/fr/这样的语言代码。更改没有问题,但是这些页面在Google上的列表很好,现在已经有404个页面了 该站点正在IIS上运行,
https://www.example.com/en-US/Something/More
https://www.example.com/de-DE/Etwas/Mehr
https://www.example.com/fr-FR/Quelquechose/plus
等等
问题是:客户机现在需要像/en/、/de/和/fr/这样的语言代码。更改没有问题,但是这些页面在Google上的列表很好,现在已经有404个页面了
该站点正在IIS上运行,它是一个ASP.Net应用程序
有谁能告诉我如何定义一个重写(重定向)规则以包含在web.config文件中,该文件重定向所有URL,如
http(s)://www.example.com/en-US[/...]
到
我尝试了不同的方法,但都不管用。问题是我不擅长正则表达式,抱歉。或者创建3条如下所示的规则:
<rewrite>
<rules>
<rule name="RedirectEnglish" stopProcessing="true">
<match url="en-US(.*)" />
<action type="Redirect" url="en{R:1}" redirectType="Temporary" />
</rule>
</rules>
</rewrite>
或者试试更别致的东西,比如
<rewrite>
<rules>
<rule name="RedirectEnglish" stopProcessing="true">
<match url="(en|de|fr)-[A-Za-z]{2}(.*)" />
<action type="Redirect" url="{R:1}{R:2}" redirectType="Temporary" />
</rule>
</rules>
</rewrite>
您可能需要调整第二个参数,了解一下正则表达式是值得的。找到一个在线正则表达式测试仪,尝试一些值,并确保所需的内容匹配。或者创建3个如下所示的规则:
<rewrite>
<rules>
<rule name="RedirectEnglish" stopProcessing="true">
<match url="en-US(.*)" />
<action type="Redirect" url="en{R:1}" redirectType="Temporary" />
</rule>
</rules>
</rewrite>
或者试试更别致的东西,比如
<rewrite>
<rules>
<rule name="RedirectEnglish" stopProcessing="true">
<match url="(en|de|fr)-[A-Za-z]{2}(.*)" />
<action type="Redirect" url="{R:1}{R:2}" redirectType="Temporary" />
</rule>
</rules>
</rewrite>
您可能需要调整第二个参数,了解一下正则表达式是值得的。找一个在线正则表达式测试仪,尝试一些值,确保您想要的东西是匹配的。谢谢,这很有效。只有一个问题:为什么重定向类型是临时的而不是永久的?这个问题很好。您可以随意更改它(在UI中执行此操作以使自己更轻松)。我总是发布样本,并使用“临时”进行测试。如果您执行永久,浏览器将缓存它,您必须清除任何命中Web服务器的缓存。所以基本上,在将其更改为永久之前,请确保您的规则是您想要的。谢谢,这是有效的。只有一个问题:为什么重定向类型是临时的而不是永久的?这个问题很好。您可以随意更改它(在UI中执行此操作以使自己更轻松)。我总是发布样本,并使用“临时”进行测试。如果您执行永久,浏览器将缓存它,您必须清除任何命中Web服务器的缓存。所以基本上,在将其更改为永久之前,请确保您的规则是您想要的。