1

サイトで ASP.NET ルーティングの使用を開始しました。Global.asax ファイルの Application_Start() を介してルートを登録しています。

すなわち

routes.MapPageRoute("ROUTE-ABOUT", "about", "~/About.aspx");
routes.MapPageRoute("ROUTE-CONTACT", "contact", "~/Contact.aspx");
//etc...

これは、About および Contact ページで完全に機能しています。

私が欲しいもの:

私のホーム ページは Home.aspx です。私がやりたかったのは、アクセスするすべての人を書き換えることです。

http://localhost/mysite.com/Home.aspx 

http://localhost/mysite.com/Home 

私が試したこと

  • マシンのローカル IIS v7.5 でサイトを実行しています (完全な管理者権限)。
  • Web.configに以下を追加しました

Web.config

<rewrite>
    <rules>
        <rule name="HOMETOSEO" stopProcessing="true">
            <match url="Home\.aspx" />
            <action type="Redirect" url="home" appendQueryString="false" />
        </rule>
    </rules>
</rewrite>

前もって感謝します

4

3 に答える 3

1

これを機能させるために何時間も試みた後、最終的にファイルの次のエントリを使用して機能させることができましたWeb.configApplication_Start()Global.asax

Web.config

<rewrite>
    <rules>
        <rule name="default" enabled="true" patternSyntax="ECMAScript" stopProcessing="false">
            <match url="(.*)Home\.aspx" ignoreCase="true" />
            <action type="Redirect" url="home" appendQueryString="false" />
        </rule>
        <rule name="lower" enabled="true" patternSyntax="ECMAScript" stopProcessing="true">
            <match url="[A-Z]" ignoreCase="false" />
            <action type="Redirect" url="{ToLower:{URL}}" /> 
        </rule>
    </rules>
</rewrite>

Global.asax

protected void Application_Start(object sender, EventArgs e)
{
    //...
    BuildStaticRoutes(RouteTable.Routes);
    //...
}

public void BuildStaticRoutes(RouteCollection routes)
{
    //...
    routes.MapPageRoute("ROUTE-HOME", "home", "~/Home.aspx");
    //...
}
于 2012-07-12T15:10:36.963 に答える
0

RouteBase から継承することにより、カスタム ルートを使用してそれを行うことができます。したがって、この場合は次のようになります。

public class HomeRoute : RouteBase
{
    public override RouteData GetRouteData(HttpContextBase httpContext)
    {
        if (httpContext.Request.Url.ToString().ToLower().Contains("home.aspx"))
        {
            httpContext.Response.Status = "301 Moved Permanently"; //Optional 301 redirect
            httpContext.Response.RedirectLocation = "Home";
            httpContext.Response.End();
        }

        return null;
    }

    public override VirtualPathData GetVirtualPath(RequestContext requestContext, RouteValueDictionary values)
    {
        return null;
    }
}

そして、ルートを登録すると、

routes.Add("HomeUrl", new HomeRoute());

そのため、/Home.aspx へのすべての要求が自動的に /Home にリダイレクトされます。明らかに、少し余分な作業を行うことで、任意の .aspx 要求に対してこれをもう少し一般的なものにすることができます。

于 2012-07-12T13:12:13.337 に答える
0

IIS v7.5 を使用している場合は、これを web.config に追加できます。

<system.webServer>  
<rewrite>
            <rules>                
                <rule name="HOMETOSEO" stopProcessing="true">
                    <match url="^Home" />
                    <conditions>
                        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
                        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
                    </conditions>
                    <action type="Rewrite" url="Home.aspx" />
                </rule>
            </rules>
</rewrite>
</system.webServer>  

と入力http://mysite.com/Homeすると、 と表示されますhttp://mysite.com/Home.aspx。それはあなたが求めているものですか、それともその逆ですか?

于 2012-07-12T12:43:52.877 に答える