Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.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
ASP.net MVC站点:重定向全部;非WWW";请求访问WWW_Asp.net_Asp.net Mvc_Routing_Seo_Iis 6 - Fatal编程技术网

ASP.net MVC站点:重定向全部;非WWW";请求访问WWW

ASP.net MVC站点:重定向全部;非WWW";请求访问WWW,asp.net,asp.net-mvc,routing,seo,iis-6,Asp.net,Asp.net Mvc,Routing,Seo,Iis 6,最近,我将一个ASP.net站点迁移到ASP.net MVC站点。之前有两个主机头,一个是mydomain.com,另一个是www.mydomain.com。我的搜索引擎优化说,你应该只使用一个网址“www.domain.com”的搜索引擎优化优势 我正在寻找一个选项做301永久重定向所有mydomain.com请求到www.mydomain.com 该网站托管在IIS6中,并在ASP.net MVC 4中开发。您可以从web.config文件中执行此操作 <system.webServe

最近,我将一个ASP.net站点迁移到ASP.net MVC站点。之前有两个主机头,一个是mydomain.com,另一个是www.mydomain.com。我的搜索引擎优化说,你应该只使用一个网址“www.domain.com”的搜索引擎优化优势

我正在寻找一个选项做301永久重定向所有mydomain.com请求到www.mydomain.com


该网站托管在IIS6中,并在ASP.net MVC 4中开发。

您可以从web.config文件中执行此操作

<system.webServer>
    <rewrite>
        <rules>
          <rule name="Redirect to WWW" stopProcessing="true">
            <match url=".*" />
            <conditions>
              <add input="{HTTP_HOST}" pattern="^example.com$" />
            </conditions>
            <action type="Redirect" url="http://www.example.com/{R:0}"
                 redirectType="Permanent" />
          </rule>
        </rules>
    </rewrite>
</system.webServer>

您可以在IIS中使用config或Url Rewriter,但我发现最好的方法就是将一些代码放入
应用程序中_BeginRequest()
到您的
global.asax.cs
中,如下所示:

var HOST = "www.mydomain.com";

if ( !Request.ServerVariables[ "HTTP_HOST" ].Equals(
  HOST,
  StringComparison.InvariantCultureIgnoreCase )
)
{
  Response.RedirectPermanent(
    ( HttpContext.Current.Request.IsSecureConnection ? "https://" : "http://" )
    + HOST
    + HttpContext.Current.Request.RawUrl );
}

因为您是在代码中执行此操作的,所以您可以在每个请求的基础上拥有所需的任何逻辑。

不幸的是,URL重写模块不适用于IIS6(仅适用于IIS7或更高版本)。您考虑过创建自己的HttpModule吗

或者,您也可以使用以下第三方解决方案之一:

(需要IIS 7或更高版本)

(与上述解决方案类似,但不要求您添加自己的域名。)


更多关于httpRedirect的信息可以在这里找到


这是一个很好的回答,@Tommy;看不到一行c#。您必须使用IIS7或更高版本才能使用URL重写模块。如果你至少有IIS7,这是一种方法,但它对IIS6不起作用。@johntrepresener-这是使用IIS URL重写模块,只是从应用程序的配置文件。如果您有IIS 7,并且可以使用此方法,则通过IIS管理器控制台或使用web.config应该以相同的方式运行。如果使用.NET路由功能,则必须将请求传递到.NET管道,这可能会导致性能略有下降。我只会在无法使用重写模块IMHO的情况下使用.NET路由。@Tommy信不信由你,在过去的两年里,我不得不引入一些政策,因为我在保存我的更改时收到了一个错误,我不能再在答案中使用mydomain.com了:D See.@MichalHosala-这也是一个有充分理由支持的政策+我不知道为什么要把它挖出来。酷!我在配置中尝试了所有方面的规则,但在IIS 7中没有成功。但这个解决方案对我有效。谢谢。
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <clear />
                <rule name="WWW Rewrite" enabled="true">
                    <match url="(.*)" />
                    <conditions>
                        <add input="{HTTP_HOST}" negate="true"
                            pattern="^www\.([.a-zA-Z0-9]+)$" />
                    </conditions>
                    <action type="Redirect" url="http://www.{HTTP_HOST}/{R:0}"
                        appendQueryString="true" redirectType="Permanent" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>