我正在尝试利用(根据标题)IIS URL重写模块将一些旧域重定向到新域。我查看了很多MS Tech的文章和各种博客,对于我们的情况,我认为我对所需的解决方案有所了解,但是,我的重定向没有解决,我只得到404错误而不是重定向到页面。
详细说明: 我们目前有一个多语言网站,如域名。 com / 英文/路径/到/页和域。 de / 英文/ Path / To / Page ,domain。 fr / English / Path / To / Page 。我们的CMS - Kentico - 设置为按照顶级域名进行翻译。 我们现在正在迁移到新网站,我们想要域。 com / 英文/路径/到/页和域。 de / 德语/翻译/路径/到/页和域。 fr / 法语/翻译/路径/到/页。 我相信以下是设置'rewriteMaps'的正确方法:
<rewrite>
<rewriteMaps>
<rewriteMap name="USRedirects" defaultValue="">
<add key="/OLD/PATH/" value="/NEW/PATH/ENGLISH" />
<add key="/OLD/PATH/" value="/NEW/PATH/ENGLISH" />
<add key="/OLD/PATH/" value="/NEW/PATH/ENGLISH" />
</rewriteMap>
</rewriteMaps>
</rewrite>
<rewrite>
<rewriteMaps>
<rewriteMap name="DERedirects" defaultValue="">
<add key="/OLD/PATH/" value="/NEW/PATH/GERMAN" />
<add key="/OLD/PATH/" value="/NEW/PATH/GERMAN" />
<add key="/OLD/PATH/" value="/NEW/PATH/GERMAN" />
</rewriteMap>
</rewriteMaps>
</rewrite>
注意:“旧路径”都是相同的,都是英文的。只有域(.de,.com,.fr)表示不同。展望未来,新网站已经翻译了每种语言的网址。 然后我将以下设置作为我的规则部分:
<rules>
<rule name="US Redirects" patternSyntax="ECMAScript" stopProcessing="true">
<match url=".*" /> <!-- rule back reference is captured here -->
<conditions>
<add input="{USRedirects:{HTTP_HOST}}" pattern="^www.domain.com$" /> <!-- condition back-reference is captured here -->
</conditions>
<action type="Redirect" url="http://www.domain.com/{R:1}" redirectType="Permanent" /> <!-- rewrite actions uses back-references to condition and to rule when rewriting the URL -->
</rule>
</rules>
<rules>
<rule name="DERedirects" patternSyntax="ECMAScript" stopProcessing="true">
<match url=".*" /> <!-- rule back reference is captured here -->
<conditions>
<add input="{USRedirects:{HTTP_HOST}}" pattern="^www.domain.de$" /> <!-- condition back-reference is captured here -->
</conditions>
<action type="Redirect" url="http://www.domain.de/{R:1}" redirectType="Permanent" /> <!-- rewrite actions uses back-references to condition and to rule when rewriting the URL -->
</rule>
</rules>
最后,我想要为每种语言/域名命名的一组规则(DE = domain.de,US = domain.com,FR = domain.fr等,其中每一个都对应于相应的rewriteMaps(名为DERedirects,USRedirects,FRRedirects等)使用输入值{:{HTTP_HOST}}中的引用语法。
毕竟说完了(并且有很多错误的语法,结果当然是500个错误)这不会崩溃或500对我来说但它唯一能做的就是抛出一个404并说出我的页面想重定向不存在。
任何帮助都会非常赞赏。而且,如果我要遗漏的任何进一步的信息很重要,请告诉我,我会尽我所能提供更多细节。
以下是我一直在使用的几个参考资料:
http://ruslany.net/2010/05/storing-url-rewrite-mappings-in-a-separate-file/
https://www.iis.net/learn/extensions/url-rewrite-module/url-rewrite-module-configuration-reference
http://weblogs.asp.net/owscott/iis-url-rewrite-redirect-multiple-domain-names-to-one
谢谢!
小更新: 以上部分仅是整体配置的部分内容。我需要的不仅仅是DE和COM设置。
此外,Ruslany的文章我试图实施,但在设置时收到了太多的500错误。语法或设置的东西不能正常工作,所以我将所有的地图和规则直接放到web.config文件中(同时保持每条要求的250kb以下)。
答案 0 :(得分:0)
找到我的答案!只需要弄清楚/意识到&#34; {:{HTTP_POST}}&#34;由于输入不可能,我可以正确搜索。发现这篇文章:
http://forums.iis.net/t/1177509.aspx
并且,如果从interwebs消失,这里是复制/粘贴版本:
您好,
重写模块中请求url的输入不包含主机名。所以你需要使用{HTTP_HOST}来验证它。您可以按照以下步骤更新规则,以使其有效:
<rewrite>
<rewriteMaps>
<rewriteMap name="Site1Redirects">
<add key="/mypage" value="/EN/mypage.aspx" />
</rewriteMap>
<rewriteMap name="Site2Redirects">
<add key="/mypage" value="/CY/mypage2.aspx" />
</rewriteMap>
</rewriteMaps>
<globalRules>
<rule name="Redirect rule1 for Site 1" stopProcessing="true">
<match url=".*" />
<conditions>
<add input="{HTTP_HOST}" pattern="^site1.mysite.com$" />
<add input="{Site1Redirects:{REQUEST_URI}}" pattern="(.+)" />
</conditions>
<action type="Redirect" url="{C:0}" appendQueryString="false" />
</rule>
<rule name="Redirect rule1 for Site 2" stopProcessing="true">
<match url=".*" />
<conditions>
<add input="{HTTP_HOST}" pattern="^site2.mysite.com$" />
<add input="{Site2Redirects:{REQUEST_URI}}" pattern="(.+)" />
</conditions>
<action type="Redirect" url="{C:0}" appendQueryString="false" />
</rule>
</globalRules>
</rewrite>
感谢。
这就是......
更新:,因为我发现这是更有价值的信息:
https://moz.com/blog/what-every-seo-should-know-about-iis#chaining