删除 HTML 或 ASPX 扩展
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/4481632/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Remove HTML or ASPX Extension
提问by roadsunknown
In a hosted IIS7 environment, I am looking for the simplest way to use extension-less file names. Simply I have the following pages:
在托管的 IIS7 环境中,我正在寻找使用无扩展名文件名的最简单方法。只是我有以下页面:
index.html (or .aspx) --> domain.com gallery.html --> domain.com/gallery videos.html --> domain.com/videos etc...
index.html (或 .aspx) --> domain.com gallery.html --> domain.com/gallery videos.html --> domain.com/videos 等等...
I only have a handful of pages, I have no dynamic code, nothing special. All the examples I have found or methods I use in other sites I've developed revolve around dynamic content, pages, etc. I am simply looking for the simplest solution, ideally not requiring any sort of url rewrite module installed. Preferably, I could keep the .html extension instead of converting the site to a ASP.NET project, but that is an option.
我只有几页,没有动态代码,没什么特别的。我发现的所有示例或我在我开发的其他站点中使用的方法都围绕动态内容、页面等。我只是在寻找最简单的解决方案,理想情况下不需要安装任何类型的 url 重写模块。最好,我可以保留 .html 扩展名,而不是将站点转换为 ASP.NET 项目,但这是一个选项。
Thanks.
谢谢。
回答by roadsunknown
I ended up using the following sites:
我最终使用了以下网站:
http://blogs.msdn.com/b/carlosag/archive/2008/09/02/iis7urlrewriteseo.aspx
http://blogs.msdn.com/b/carlosag/archive/2008/09/02/iis7urlrewriteseo.aspx
and
和
http://forums.iis.net/t/1162450.aspx
http://forums.iis.net/t/1162450.aspx
or basically the following code in my web.config file using the IIS7 URL Rewrite Module that most hosted sites now offer (in this case I am using GoDaddy):
或者基本上使用大多数托管站点现在提供的 IIS7 URL 重写模块在我的 web.config 文件中使用以下代码(在这种情况下,我使用的是 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>
回答by Riga
Another little bit more modern way to do this is using Microsoft.AspNet.FriendlyUrls. In the Global.asax.cs add:
另一种更现代的方法是使用 Microsoft.AspNet.FriendlyUrls。在 Global.asax.cs 添加:
void Application_Start(object sender, EventArgs e)
{
// Code that runs on application startup
RouteConfig.RegisterRoutes(RouteTable.Routes);
and in the RouteConfig file
并在 RouteConfig 文件中
public static class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
var settings = new FriendlyUrlSettings();
settings.AutoRedirectMode = RedirectMode.Permanent;
routes.EnableFriendlyUrls(settings);
}
回答by Pawan Maheshwari
Another simplest solution for achieving the same:
实现相同目标的另一个最简单的解决方案:
Put following lines of code into your global.ascx file:
将以下代码行放入 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");
}
}
回答by dontangg
If you have dynamic code, I think that the easiest thing to do is to just rename the files from .aspx to .html especially if you only have a handful of pages. There is no simple way to do it without rewriting the URL somehow.
如果您有动态代码,我认为最简单的方法就是将文件从 .aspx 重命名为 .html,尤其是当您只有少数页面时。没有以某种方式重写 URL 的简单方法。
However, with IIS 7, you can set it up really easily with an HTTP Module. Scott Guthrie explains this really well. In this post, he shows several approaches to customizing the URLs. I think that you would like approach #3 the best.
但是,使用 IIS 7,您可以使用 HTTP 模块轻松设置它。Scott Guthrie 很好地解释了这一点。在这篇文章中,他展示了几种自定义 URL 的方法。我认为你最喜欢方法#3。
http://weblogs.asp.net/scottgu/archive/2007/02/26/tip-trick-url-rewriting-with-asp-net.aspx
http://weblogs.asp.net/scottgu/archive/2007/02/26/tip-trick-url-rewriting-with-asp-net.aspx
回答by sec0ndHand
I don't have enough points to comment, and this is improving Pawan M's answer. His will work, unless you have Query Strings being used on the page. I have modified Pawan's code to allow for query strings, not to mention mine is the vb version.
我没有足够的观点来评论,这是改进 Pawan M 的答案。他会起作用,除非您在页面上使用了查询字符串。我已经修改了 Pawan 的代码以允许查询字符串,更不用说我的是 vb 版本。
Check to make sure your project has a Global.asax.vb file in it. If it doesn't Add an Item by doing this:
检查以确保您的项目中有 Global.asax.vb 文件。如果它没有通过执行以下操作添加项目:
File -> New -> File -> Global Application Class
文件 -> 新建 -> 文件 -> 全局应用程序类
In the Global.asax file of your project add this function:
在项目的 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
回答by king zecole
You can do this in c# to use a customized extension in your URL in ASP.NET.
您可以在 c# 中执行此操作,以便在 ASP.NET 中的 URL 中使用自定义扩展。
Let ".recon" in the code be your customized extension. (i.e replace ".recon" to your own extension)
让代码中的“.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");
}
}