在托管的IIS7环境中,我正在寻找使用无扩展名文件名的最简单方法。我只有以下几页:
index.html(或.aspx) - > domain.com gallery.html - > domain.com/gallery videos.html - > domain.com/videos 等...
我只有一些页面,我没有动态代码,没什么特别的。我发现的所有示例或我在其他网站中使用的方法都围绕着动态内容,页面等。我只是在寻找最简单的解决方案,理想情况下不需要安装任何类型的url重写模块。最好是,我可以保留.html扩展名,而不是将站点转换为ASP.NET项目,但这是一个选项。
感谢。
答案 0 :(得分:47)
我最终使用了以下网站:
http://blogs.msdn.com/b/carlosag/archive/2008/09/02/iis7urlrewriteseo.aspx
和
http://forums.iis.net/t/1162450.aspx
或者我的web.config文件中的以下代码使用大多数托管网站现在提供的IIS7 URL重写模块(在这种情况下我使用的是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>
答案 1 :(得分:7)
另一种更现代的方法是使用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);
}
答案 2 :(得分:6)
实现相同目标的另一个最简单的解决方案:
将以下代码行放入global.ascx文件中:
void 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");
}
}
答案 3 :(得分:1)
如果您有动态代码,我认为最简单的方法是将文件从.aspx重命名为.html,尤其是如果您只有少量页面。如果不以某种方式重写URL,就没有简单的方法。
但是,使用IIS 7,您可以使用HTTP模块轻松设置它。 Scott Guthrie非常好地解释了这一点。在这篇文章中,他展示了几种自定义URL的方法。我认为你最好接近#3。
http://weblogs.asp.net/scottgu/archive/2007/02/26/tip-trick-url-rewriting-with-asp-net.aspx
答案 4 :(得分:0)
我没有足够的评论意见,这正在改善Pawan M的答案。除非你在页面上使用了Query Strings,否则他的工作会有效。我修改了Pawan的代码以允许查询字符串,更不用说我的是vb版本。
检查以确保您的项目中包含Global.asax.vb文件。如果它没有通过这样做添加一个项目:
档案 - &gt;新 - &gt;档案 - &gt;全球申请类
在项目的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
答案 5 :(得分:0)
您可以在c#中执行此操作,以在ASP.NET中的URL中使用自定义扩展名。
让代码中的“.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");
}
}
答案 6 :(得分:0)
在特定页面的asp WebForm中删除.aspx扩展名的简便解决方案:
1-检查解决方案资源管理器>>转到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");
// enter code here
希望这对您来说很好。
// Ghazi Hur mahar.ghazi@gmail.com