• 301 redirect ASP.NET?

    Valeriy1991
    @Valeriy1991
    Разработчик .NET C# (ASP.NET MVC) в Alfa-B, Moscow
    Содержимое web.config - реально работающий пример (названия сайтов изменены на фейковые), который:
    1) при переходе на www.company.ru перенаправляет на company.ru
    2) при переходе на mysite.com перенаправляет на company.ru
    3) при переходе на www.mysite.com перенаправляет на company.ru
    4) сохраняется ссылочная целостность, т.е. при переходе по www.mysite.com/home/write_to_us перенаправляет на company.ru/home/write_to_us

    Если не работает, значит, что-то с модулем URL Rewrite Module в IIS.

    На сайте mysite.com (с которого будет редирект) в web.config пишем:

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
      <system.webServer>
    	<rewrite>
    		<rules>			
    			<rule name="Condition1" stopProcessing="true">
    				<match url="^(.*)$" ignoreCase="false" />
    				<conditions logicalGrouping="MatchAll">
    					<add input="{HTTP_HOST}" pattern="^(www\.)?mysite\.com$" />
    				</conditions>
    				<action type="Redirect" url="http://company.ru/{R:1}" redirectType="Permanent" />
    			</rule>
    			<rule name="Condition2" stopProcessing="true">
    				<match url="^(.*)$" ignoreCase="false" />
    				<conditions logicalGrouping="MatchAll">
    						<add input="{HTTP_HOST}" pattern="^www\.company\.ru" />
    				</conditions>
    				<action type="Redirect" url="http://company.ru/{R:1}" redirectType="Permanent" />
    			</rule>
    		</rules>
    	</rewrite>
      </system.webServer>
    </configuration>


    На сайте company.ru (на который будет редирект) в web.config пишем:

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
      ...
      <system.webServer>
    	  <rewrite>
    		  <rules>
    			  <rule name="Redirect to company.ru 1" stopProcessing="true">
    				  <match url="^(.*)$" ignoreCase="false" />
    				  <conditions logicalGrouping="MatchAll">
    					  <add input="{HTTP_HOST}" pattern="^(www\.)?mysite\.com$" />
    				  </conditions>
    				  <action type="Redirect" url="http://company.ru/{R:1}" redirectType="Permanent" />
    			  </rule>
    			  <rule name="Redirect to company.ru 2" stopProcessing="true">
    				  <match url="^(.*)$" ignoreCase="false" />
    				  <conditions logicalGrouping="MatchAll">
    						  <add input="{HTTP_HOST}" pattern="^www\.company\.ru" />
    				  </conditions>
    				  <action type="Redirect" url="http://company.ru/{R:1}" redirectType="Permanent" />
    			  </rule>
    		  </rules>
    	  </rewrite>
      </system.webServer>
      ...
    </configuration>


    Возможно, сама Visual Studio будет у Вас ругаться на наличие секции "rewrite" - у меня она эту секцию подчеркивала. В чем причина - я, честно говоря, не помню, но на самом сайте уже все работает на ура.

    Успехов!
    Ответ написан
    8 комментариев