ホストされたIIS7環境では、拡張子のないファイル名を使用する最も簡単な方法を探しています。次のページがあります。
index.html(または.aspx)-> domain.com gallery.html-> domain.com/gallery videos.html-> domain.com/videosなど...
数ページしかなく、動的コードも特別なものもありません。私が見つけたすべての例または私が開発した他のサイトで使用する方法は、動的なコンテンツ、ページなどを中心に展開します。できれば、サイトをASP.NETプロジェクトに変換する代わりに.html拡張子を保持することができますが、それはオプションです。
ありがとう。
次のサイトを使用することになりました。
http://blogs.msdn.com/b/carlosag/archive/2008/09/02/iis7urlrewriteseo.aspx
そして
http://forums.iis.net/t/1162450.aspx
または基本的に、ほとんどのホストされたサイトが現在提供している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>
これを行うためのもう少し新しい方法は、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);
}
同じことを達成するためのもう1つの最も簡単なソリューション:
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");
}
}
動的なコードがある場合、特に少数のページしかない場合は、ファイルの名前を.aspxから.htmlに変更するのが最も簡単だと思います。何らかの形でURLを書き換えずにそれを行う簡単な方法はありません。
ただし、IIS 7を使用すると、HTTPモジュールを使用して簡単にセットアップできます。スコットガスリーはこれについて非常によく説明しています。アプローチ#3が最適です。
http://weblogs.asp.net/scottgu/archive/2007/02/26/tip-trick-url-rewriting-with-asp-net.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
これを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");
}
}