Windows services Windows服务器重定向问题
我正在处理的一些客户端使用Windows服务器,因此不支持.htaccess文件。这不是什么大问题,但我关心的是: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
<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>