ASP.NET 2.0 C# を使用しています。「www」を含む Web アプリのすべてのリクエストを「www」なしにリダイレクトしたい
www.example.com から example.com
または
example.com から www.example.com
Stackoverflow.com は既にこれを行っています。PHP (.htaccess) ファイルに事前に作成されたメカニズムがあることはわかっています。しかし、asp.netでそれを行う方法は?
ありがとう
ASP.NET 2.0 C# を使用しています。「www」を含む Web アプリのすべてのリクエストを「www」なしにリダイレクトしたい
www.example.com から example.com
または
example.com から www.example.com
Stackoverflow.com は既にこれを行っています。PHP (.htaccess) ファイルに事前に作成されたメカニズムがあることはわかっています。しかし、asp.netでそれを行う方法は?
ありがとう
これに関する Stackoverflow ブログ投稿があります。
https://blog.stackoverflow.com/2008/06/dropping-the-www-prefix/
ジェフの引用:
すべての着信 URL から WWW プレフィックスを削除する IIS7 ルールを次に示します。この XML フラグメントを以下の web.config ファイルにカット アンド ペーストします。
<system.webServer> / <rewrite> / <rules> <rule name="Remove WWW prefix" > <match url="(.*)" ignoreCase="true" /> <conditions> <add input="{HTTP_HOST}" pattern="^www\.domain\.com" /> </conditions> <action type="Redirect" url="http://domain.com/{R:1}" redirectType="Permanent" /> </rule>または、www プレフィックスを使用したい場合は、それも行うことができます。
<rule name="Add WWW prefix" > <match url="(.*)" ignoreCase="true" /> <conditions> <add input="{HTTP_HOST}" pattern="^domain\.com" /> </conditions> <action type="Redirect" url="http://www.domain.com/{R:1}" redirectType="Permanent" /> </rule>
IIS 設定を変更できなかったときに、過去に次のソリューションを使用しました。
HTTPModule (おそらく最もクリーン)、Application_BeginRequest の global.asax.cs、または OnInit などの BasePage タイプのイベントのいずれかで、使用したい既知の文字列を使用して、要求された URL に対してチェックを実行します。
public class SeoUrls : IHttpModule
{
#region IHttpModule Members
public void Init(HttpApplication context)
{
context.PreRequestHandlerExecute += OnPreRequestHandlerExecute;
}
public void Dispose()
{
}
#endregion
private void OnPreRequestHandlerExecute(object sender, EventArgs e)
{
HttpContext ctx = ((HttpApplication) sender).Context;
IHttpHandler handler = ctx.Handler;
// Only worry about redirecting pages at this point
// static files might be coming from a different domain
if (handler is Page)
{
if (Ctx.Request.Url.Host != WebConfigurationManager.AppSettings["FullHost"])
{
UriBuilder uri = new UriBuilder(ctx.Request.Url);
uri.Host = WebConfigurationManager.AppSettings["FullHost"];
// Perform a permanent redirect - I've generally implemented this as an
// extension method so I can use Response.PermanentRedirect(uri)
// but expanded here for obviousness:
response.AddHeader("Location", uri);
response.StatusCode = 301;
response.StatusDescription = "Moved Permanently";
response.End();
}
}
}
}
次に、クラスを web.config に登録します。
<httpModules>
[...]
<add type="[Namespace.]SeoUrls, [AssemblyName], [Version=x.x.x.x, Culture=neutral, PublicKeyToken=933d439bb833333a]" name="SeoUrls"/>
</httpModules>
この方法は私たちにとって非常にうまく機能します。
受け入れられた回答は 1 つまたは少数の URL で機能しますが、私のアプリケーションは何百ものドメイン名を提供します (手動で入力するには URL が多すぎます)。
これが私の IIS7 URL 書き換えモジュール ルールです (ここでのアクション タイプは、実際には「書き換え」ではなく 301 リダイレクトです)。よく働く:
<rule name="Add WWW prefix" >
<match url="(.*)" ignoreCase="true" />
<conditions>
<add input="{HTTP_HOST}" negate="true" pattern="^www\.(.+)$" />
</conditions>
<action type="Redirect" url="http://www.{HTTP_HOST}/{R:1}"
appendQueryString="true" redirectType="Permanent" />
</rule>
IIS 6 でこれを行うのは非常に簡単です。基本的に、カスタム 404 ページの .aspx ページ以外は何も持たない 2 番目の仮想サーバーを作成しました。このページは、WHATEVERSERVER.com/whateverpage.aspx に対するすべての要求をキャッチし、URL を www.whateverserver.com/whateverpage.aspx に変更することで実サーバーにリダイレクトしました。
設定が非常に簡単で、ドメインごとに追加のルールを設定する必要なく、(たとえば複数のドメインがある場合) 入ってくるすべてのドメインで機能するという利点があります。したがって、www.myoldserver.com/xxx に対するすべてのリクエストも、www.whateverserver.com/xxx にリダイレクトされます。
IIS 7 では、これはすべて URL 書き込みコンポーネントで実行できますが、この仮想サーバーではリダイレクトをオフにしておくことをお勧めします。
IIS 7 を使用している場合は、URL 書き換えに移動し、正規のドメイン名規則を追加するだけです。
PS domain.com から www.domain.com にリダイレクトされるようにするためです。
これは通常、構成で Web サーバーによって直接処理されます。あなたが言及したように、.htaccess ファイルは Apache Web サーバーに対してこれを行います - PHP とは何の関係もありません。ASP を使用しているため、サーバーが IIS であることはほぼ確実です。IIS でこれを直接設定する方法があることは知っていますが、それが何であるかはわかりません。「ASP リダイレクト」ではなく「IIS リダイレクト」に関連するものをグーグルで検索する必要があることを知っておくと、検索に役立つ場合があります。
とは言っても、PHP でそれを行うことはできますが、ほぼ確実に ASP でも行うことができますが、間違ったドメインの URL にアクセスすると、リダイレクト操作を実行する ASP スクリプトを呼び出す必要があります (適切な API 呼び出しを使用するか、ヘッダーを直接設定することによって)。 )。これには、間違ったホスト上のすべての URL がスクリプトによって処理されるように、サーバー側で URL の書き換えなどを行う必要があります。最初にサーバーで直接実行してください :)