Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex IIS Url重写器:重定向语言代码_Regex_Iis_Url Rewriting - Fatal编程技术网

Regex IIS 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上运行,

我用不同的语言为客户创建了一个网站,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上运行,它是一个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服务器的缓存。所以基本上,在将其更改为永久之前,请确保您的规则是您想要的。