Windows services Windows服务器重定向问题

Windows services Windows服务器重定向问题,windows-services,robots.txt,Windows Services,Robots.txt,我正在处理的一些客户端使用Windows服务器,因此不支持.htaccess文件。这不是什么大问题,但我关心的是: <system.web> <!-- Configuration for classic pipeline mode --> <httpModules> <add name="CanonicalRedirectModule" type="CanonicalRedirectModule"/> </httpModu

我正在处理的一些客户端使用Windows服务器,因此不支持.htaccess文件。这不是什么大问题,但我关心的是:

<system.web>
  <!-- Configuration for classic pipeline mode -->
  <httpModules>
    <add name="CanonicalRedirectModule" type="CanonicalRedirectModule"/>
  </httpModules>
</system.web>

<system.webServer>
  <!-- Configuration for integrated pipeline mode -->
  <validation validateIntegratedModeConfiguration="false" />
  <modules runAllManagedModulesForAllRequests="true" >
    <add name="CanonicalRedirectModule" type="CanonicalRedirectModule"/>
  </modules>
</system.webServer>
我在.htaccess文件中设置了一个规则,用于将网站的非www版本重定向到www版本。这使URL看起来更漂亮,并防止重复内容被索引

<system.web>
  <!-- Configuration for classic pipeline mode -->
  <httpModules>
    <add name="CanonicalRedirectModule" type="CanonicalRedirectModule"/>
  </httpModules>
</system.web>

<system.webServer>
  <!-- Configuration for integrated pipeline mode -->
  <validation validateIntegratedModeConfiguration="false" />
  <modules runAllManagedModulesForAllRequests="true" >
    <add name="CanonicalRedirectModule" type="CanonicalRedirectModule"/>
  </modules>
</system.webServer>
但是,在Windows服务器上似乎没有一种简单的方法可以做到这一点。我已经阅读了有关设置web.config文件的教程,但是我的Windows server经验非常有限,很多时候我只能通过FTP访问该站点(没有服务器访问权限)

<system.web>
  <!-- Configuration for classic pipeline mode -->
  <httpModules>
    <add name="CanonicalRedirectModule" type="CanonicalRedirectModule"/>
  </httpModules>
</system.web>

<system.webServer>
  <!-- Configuration for integrated pipeline mode -->
  <validation validateIntegratedModeConfiguration="false" />
  <modules runAllManagedModulesForAllRequests="true" >
    <add name="CanonicalRedirectModule" type="CanonicalRedirectModule"/>
  </modules>
</system.webServer>
有没有关于我可以使用的快速且相当简单的解决方案的想法?

创建web.config(在根目录中)文件,并包含以下内容:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
     <modules runAllManagedModulesForAllRequests="true" />
        <rewrite>
            <rules>
                <rule name="CanonicalHostNameRule" stopProcessing="true">
                    <match url="(.*)" />
                    <conditions>
                        <add input="{HTTP_HOST}" pattern="^www\.domain\.com$" negate="true" />
                    </conditions>
                    <action type="Redirect" url="http://www.domain.com/{R:1}" />
                </rule>
            </rules>
        </rewrite>
  </system.webServer>
</configuration>
using System;
using System.Web;

public class CanonicalRedirectModule : IHttpModule
{
    public const string configKeyCanonicalHostName = "CanonicalHostName";

    private string configCanonicalHostName;

    #region IHttpModule Members

    public void Dispose()
    {
    }

    public void Init(HttpApplication context)
    {
        this.configCanonicalHostName = System.Configuration.ConfigurationManager.AppSettings[configKeyCanonicalHostName];

        if (string.IsNullOrEmpty(this.configCanonicalHostName))
        {
            System.Diagnostics.Trace.TraceWarning("Can't find application setting {0} in configuration file (/configuration/appSettings/add/...).", configKeyCanonicalHostName);
//#if !DEBUG
//            return;
//#endif
        }

        context.BeginRequest += new EventHandler(context_BeginRequest);
    }

    #endregion

    void context_BeginRequest(object sender, EventArgs e)
    {
        HttpApplication app = (HttpApplication)sender;
        if (app.Request.Url.Host != this.configCanonicalHostName) //&& !app.Request.IsLocal
        {
            UriBuilder newUrl = new UriBuilder(app.Request.Url);
            newUrl.Host = this.configCanonicalHostName;

            app.Response.Redirect(newUrl.ToString(), true);
        }
    }
}  
<system.web>
  <!-- Configuration for classic pipeline mode -->
  <httpModules>
    <add name="CanonicalRedirectModule" type="CanonicalRedirectModule"/>
  </httpModules>
</system.web>

<system.webServer>
  <!-- Configuration for integrated pipeline mode -->
  <validation validateIntegratedModeConfiguration="false" />
  <modules runAllManagedModulesForAllRequests="true" >
    <add name="CanonicalRedirectModule" type="CanonicalRedirectModule"/>
  </modules>
</system.webServer>


(至少2.0版)必须安装。

要使用文件夹
App\u code
中的自定义模块创建文件
CanonicalRedirectModule.cs
,请将其与下一个内容一起放在网站应用程序的根文件夹中:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
     <modules runAllManagedModulesForAllRequests="true" />
        <rewrite>
            <rules>
                <rule name="CanonicalHostNameRule" stopProcessing="true">
                    <match url="(.*)" />
                    <conditions>
                        <add input="{HTTP_HOST}" pattern="^www\.domain\.com$" negate="true" />
                    </conditions>
                    <action type="Redirect" url="http://www.domain.com/{R:1}" />
                </rule>
            </rules>
        </rewrite>
  </system.webServer>
</configuration>
using System;
using System.Web;

public class CanonicalRedirectModule : IHttpModule
{
    public const string configKeyCanonicalHostName = "CanonicalHostName";

    private string configCanonicalHostName;

    #region IHttpModule Members

    public void Dispose()
    {
    }

    public void Init(HttpApplication context)
    {
        this.configCanonicalHostName = System.Configuration.ConfigurationManager.AppSettings[configKeyCanonicalHostName];

        if (string.IsNullOrEmpty(this.configCanonicalHostName))
        {
            System.Diagnostics.Trace.TraceWarning("Can't find application setting {0} in configuration file (/configuration/appSettings/add/...).", configKeyCanonicalHostName);
//#if !DEBUG
//            return;
//#endif
        }

        context.BeginRequest += new EventHandler(context_BeginRequest);
    }

    #endregion

    void context_BeginRequest(object sender, EventArgs e)
    {
        HttpApplication app = (HttpApplication)sender;
        if (app.Request.Url.Host != this.configCanonicalHostName) //&& !app.Request.IsLocal
        {
            UriBuilder newUrl = new UriBuilder(app.Request.Url);
            newUrl.Host = this.configCanonicalHostName;

            app.Response.Redirect(newUrl.ToString(), true);
        }
    }
}  
<system.web>
  <!-- Configuration for classic pipeline mode -->
  <httpModules>
    <add name="CanonicalRedirectModule" type="CanonicalRedirectModule"/>
  </httpModules>
</system.web>

<system.webServer>
  <!-- Configuration for integrated pipeline mode -->
  <validation validateIntegratedModeConfiguration="false" />
  <modules runAllManagedModulesForAllRequests="true" >
    <add name="CanonicalRedirectModule" type="CanonicalRedirectModule"/>
  </modules>
</system.webServer>
然后在
web.config
中配置模块:

 <?xml version="1.0"?>
<system.web>
  <!-- Configuration for classic pipeline mode -->
  <httpModules>
    <add name="CanonicalRedirectModule" type="CanonicalRedirectModule"/>
  </httpModules>
</system.web>

<system.webServer>
  <!-- Configuration for integrated pipeline mode -->
  <validation validateIntegratedModeConfiguration="false" />
  <modules runAllManagedModulesForAllRequests="true" >
    <add name="CanonicalRedirectModule" type="CanonicalRedirectModule"/>
  </modules>
</system.webServer>

<system.web>
  <!-- Configuration for classic pipeline mode -->
  <httpModules>
    <add name="CanonicalRedirectModule" type="CanonicalRedirectModule"/>
  </httpModules>
</system.web>

<system.webServer>
  <!-- Configuration for integrated pipeline mode -->
  <validation validateIntegratedModeConfiguration="false" />
  <modules runAllManagedModulesForAllRequests="true" >
    <add name="CanonicalRedirectModule" type="CanonicalRedirectModule"/>
  </modules>
</system.webServer>


这对其中一个站点非常有效!但是,它对另一个不起作用。如果他们没有安装URL重写模块怎么办?试着协调重写模块的安装-它通常是可接受的扩展。另一方面,您可以编写自己的模块-这非常简单(如果您需要支持,我可以明天为您编写)。您太好了,但是,我甚至不知道如何添加模块/扩展名。使用此配置文件,我还可以删除索引页的文件名,因此它301重定向到根目录。例如:重定向到此项似乎不起作用。我复制了模块,给它起了正确的名字,并把它放在一个名为App_Code的文件夹(根目录)中。然后我将上面的web.config放在根目录中。我错过什么了吗?谢谢,请提供更多关于服务器环境的信息(IIS版本,ASP.NET版本)。这就是问题所在,我无法找到答案。我只能获得FTP访问权限。最好的方法是与您的主机提供商支持部门联系,询问他们IIS服务器版本、ASP.NET版本和启用的模块。非常基本的信息在名为server_SOFTWARE的服务器变量中。在aspx文件中,您可以通过将下一行放入空白文件(test.aspx)进行检查:在php文件中,您可以通过将下一行放入空白文件(test.php)进行检查:
<system.web>
  <!-- Configuration for classic pipeline mode -->
  <httpModules>
    <add name="CanonicalRedirectModule" type="CanonicalRedirectModule"/>
  </httpModules>
</system.web>

<system.webServer>
  <!-- Configuration for integrated pipeline mode -->
  <validation validateIntegratedModeConfiguration="false" />
  <modules runAllManagedModulesForAllRequests="true" >
    <add name="CanonicalRedirectModule" type="CanonicalRedirectModule"/>
  </modules>
</system.webServer>