- index.html (或 .aspx) --> example.com - gallery.html --> example.com/gallery - videos.html --> example.com/videos - 等等...
我最终使用了以下网站:
http://blogs.msdn.com/b/carlosag/archive/2008/09/02/iis7urlrewriteseo.aspx
并且
http://forums.iis.net/t/1162450.aspx
或者基本上在我的web.config文件中使用IIS7 URL Rewrite模块的以下代码,大多数托管站点现在都提供(在这种情况下,我正在使用GoDaddy):
<system.webServer>
<rewrite>
<rules>
<rule name="RewriteASPX">
<match url="(.*)" />
<conditions logicalGrouping="MatchAll">
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
</conditions>
<action type="Rewrite" url="{R:1}.aspx" />
</rule>
</rules>
</rewrite>
</system.webServer>
另一种更现代的方法是使用 Microsoft.AspNet.FriendlyUrls。在 Global.asax.cs 中添加以下内容:
void Application_Start(object sender, EventArgs e)
{
// Code that runs on application startup
RouteConfig.RegisterRoutes(RouteTable.Routes);
并且在RouteConfig文件中
public static class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
var settings = new FriendlyUrlSettings();
settings.AutoRedirectMode = RedirectMode.Permanent;
routes.EnableFriendlyUrls(settings);
}
WebForms
项目时,此代码将自动添加。 - Shaiju Tvoid Application_BeginRequest(object sender, EventArgs e)
{
String fullOrigionalpath = Request.Url.ToString();
String[] sElements = fullOrigionalpath.Split('/');
String[] sFilePath = sElements[sElements.Length - 1].Split('.');
if (!fullOrigionalpath.Contains(".aspx") && sFilePath.Length == 1)
{
if (!string.IsNullOrEmpty(sFilePath[0].Trim()))
Context.RewritePath(sFilePath[0] + ".aspx");
}
}
如果您有动态代码,我认为最简单的方法就是将文件从.aspx重命名为.html,特别是如果您只有少量页面。没有简单的方法可以在不重写URL的情况下完成。
但是,在IIS 7中,您可以使用HTTP模块轻松设置它。Scott Guthrie非常好地解释了这一点。在这篇文章中,他展示了几种自定义URL的方法。我认为您会最喜欢第三种方法。
http://weblogs.asp.net/scottgu/archive/2007/02/26/tip-trick-url-rewriting-with-asp-net.aspx
在ASP.NET中,您可以使用C#来使用自定义扩展名。
让代码中的“.recon”成为您的自定义扩展名。(即将“.recon”替换为您自己的扩展名)
protected void Application_BeginRequest(object sender, EventArgs e)
{
HttpApplication app = sender as HttpApplication;
if (app.Request.Path.ToLower().IndexOf(".recon") > 0)
{
string rawpath = app.Request.Path;
string path = rawpath.Substring(0, rawpath.IndexOf(".recon"));
app.Context.RewritePath(path+".aspx");
}
}
我没有足够的积分来评论,这是在改进Pawan M的答案。他的代码可以工作,除非页面上使用了查询字符串。我修改了Pawan的代码以允许查询字符串,而且我的是vb版本。
检查确保您的项目中有一个Global.asax.vb文件。如果没有,请通过以下方式添加一个项目:
文件 -> 新建 -> 文件 -> 全局应用程序类
在您的项目的Global.asax文件中添加此函数:
Sub Application_BeginRequest(sender As Object, e As EventArgs)
Dim fullOrigionalpath As [String] = Request.Url.ToString()
Dim sElements As [String]() = fullOrigionalpath.Split("/"c)
Dim sFilePath As [String]() = sElements(sElements.Length - 1).Split("."c)
Dim queryString As [String]() = sElements(sElements.Length - 1).Split("?"c)
If Not fullOrigionalpath.Contains(".aspx") AndAlso sFilePath.Length = 1 Then
If Not String.IsNullOrEmpty(sFilePath(0).Trim()) Then
If queryString.Length = 1 Then
Context.RewritePath(sFilePath(0) + ".aspx")
Else
Context.RewritePath(queryString(0) + ".aspx?" + queryString(1))
End If
End If
End If
End Sub
ASP WebForm中针对特定页面删除.aspx
扩展名的简单解决方案:
检查“Solution Explorer”>>转到Global.asax
文件>>检查方法Application_BeginRequest,在此方法内编写以下代码。
// Remove aspx Extension From Smy Page
string CurrentPath = Request.Path; // getting Current Url
if(CurrentPath == "/YourPageURL")
HttpContext MyContext = HttpContext.Current;
MyContext.RewritePath("/YourPageURL.aspx");