簡體   English   中英

將子域重定向到MVC Core中的區域

[英]Redirect subdomain to area in mvc core

我這一天要花很多時間

我將Windows Server 2016作為服務器另一端,我在MVC Core 2.2中開發我的網站

嘗試重定向形式admin.mysite.commysite.com/admin當用戶寫admin.mysite.com作為URL重定向到mysite.com/admin

測試很多方法:

  1. 在IIS中使用以下模式進行重寫: 區域和子域路由

      <rules> <rule name="Rewrite sub-domain to dir"> <match url="^admin.*$" /> <conditions> <add input="{HTTP_HOST}" pattern="^admin\\.mysite\\.com$" /> </conditions> <action type="Rewrite" url="mysite.com/admin/{R:0}" /> </rule> </rules> </rewrite> 
  2. 使用這種方式https://www.azurecurve.co.uk/2011/12/how-to-rewrite-a-sub-domain-to-a-directory-in-iis/ 在此處輸入鏈接描述

public class AreaRouter : MvcRouteHandler, IRouter
     {
   public new async Task RouteAsync(RouteContext context)
   {
       string url = context.HttpContext.Request.Headers["HOST"]; 
       var splittedUrl = url.Split('.');

       if (splittedUrl.Length > 0 && splittedUrl[0] == "admin")
       {
           context.RouteData.Values.Add("area", "Admin");
       }

       await base.RouteAsync(context);
    }
   }

但是OP方式不起作用

更新:

        // This method gets called by the runtime. Use this method to add services to the container.
    public void ConfigureServices(IServiceCollection services)
    {
        //services.Configure<SmtpConfig>(options => Configuration.GetSection("SmtpConfig").Bind(options));
        //services.Configure<AntiDosConfig>(options => Configuration.GetSection("AntiDosConfig").Bind(options));
        services.Configure<AntiXssConfig>(options => Configuration.GetSection("AntiXssConfig").Bind(options));
        //services.AddDNTCommonWeb();
        services.Configure<CookiePolicyOptions>(options =>
        {
            // This lambda determines whether user consent for non-essential cookies is needed for a given request.
            options.CheckConsentNeeded = context => true;
            options.MinimumSameSitePolicy = SameSiteMode.None;
        });



         var connection = @"Server=*.*.*.*;Database=...;Integrated Security=false;Initial Catalog=...;User ID=...;Password=...;";
        services.AddDbContext<myContext>(options =>
          options.UseSqlServer(connection));
        services.AddSession();
        services.AddDistributedMemoryCache();

        services.AddIdentity<ApplicationUser, IdentityRole>()
            .AddRoles<IdentityRole>()
            .AddRoleManager<RoleManager<IdentityRole>>()
            .AddDefaultTokenProviders()
            .AddDefaultUI(UIFramework.Bootstrap4)
         .AddEntityFrameworkStores<myContext>();




        services.Configure<IdentityOptions>(options =>
        {
            // Password settings.
            options.Password.RequireDigit = true;
            options.Password.RequireLowercase = true;
            options.Password.RequireNonAlphanumeric = true;
            options.Password.RequireUppercase = true;
            options.Password.RequiredLength = 6;
            options.Password.RequiredUniqueChars = 1;

            // Lockout settings.
            options.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromMinutes(5);
            options.Lockout.MaxFailedAccessAttempts = 5;
            options.Lockout.AllowedForNewUsers = true;

            // User settings.
            options.User.AllowedUserNameCharacters =
            "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._@+";
            options.User.RequireUniqueEmail = false;
        });

        services.ConfigureApplicationCookie(options =>
        {
            // Cookie settings
            options.Cookie.HttpOnly = true;
            options.ExpireTimeSpan = TimeSpan.FromMinutes(20);

            options.LoginPath = "/Identity/Account/Login";
            options.AccessDeniedPath = "/Identity/Account/AccessDenied";
            options.SlidingExpiration = true;
        });

        services.AddElmah(options => options.Path = "elm");





        services.AddScoped<IPostService, PostService>();
        services.AddScoped<IContactRepository, ContactReposiory>();
        services.AddScoped<ICounterRepository, CounterRepository>();
        services.AddScoped<ICommentRepository, CommentRepository>();
        services.AddScoped<IAntiXssService, AntiXssService>();
        services.AddScoped<IHtmlReaderService, HtmlReaderService>();
        services.AddScoped<Model.Counter>();
        services.AddMvc()
            .AddRazorPagesOptions(options =>
            {
              //  options.Conventions.AuthorizePage("/Contact");
                options.Conventions.AuthorizeAreaFolder("admin","/post");
                options.Conventions.AuthorizeAreaFolder("admin","/");
                options.Conventions.AuthorizeAreaPage("Identity", "/Account/register");
                //options.Conventions.AllowAnonymousToPage("/Private/PublicPage");
                //options.Conventions.AllowAnonymousToFolder("/Private/PublicPages");
            })
            .SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseExceptionHandler("/Error");
            // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
            app.UseHsts();
        }
        //app.UseAntiDos(); 

        app.UseSession();
        app.UseHttpsRedirection();
        app.UseStaticFiles();
        app.UseCookiePolicy();
        app.UseAuthentication();
        app.UseMiddleware(typeof(VisitorCounterMiddleware));
        app.UseMvc();
    }

為了將請求跟蹤到IIS,我啟用了它,但是在請求時沒有得到任何錯誤,例如admin.mysite.com,我得到了錯誤,但與這樣的請求無關

<!-- saved from url=(0014)about:internet -->
<failedRequest url="http://mysitte.com:80/PostDetails/Post/102/index.html"
           siteId="12"
           appPoolId="mysitte.com"
           processId="3424"
           verb="GET"
           remoteUserName=""
           userName=""
           tokenUserName="NT AUTHORITY\IUSR"
           authenticationType="anonymous"
           activityId="{80000027-0000-FF00-B63F-84710C7967BB}"
           failureReason="TIME_TAKEN"
           statusCode="200"
           triggerStatusCode="0"
           timeTaken="1062"
           xmlns:freb="http://schemas.microsoft.com/win/2006/06/iis/freb"
           >

據我所知,是否要使用url重寫將所有請求從admin.mysite.com重定向到mysite.com/admin。

我建議您可以嘗試使用以下網址重寫規則:

注意:匹配網址部分將不匹配主機網址,例如admin.mysite.com 它只會匹配url的模式部分,例如/admin/test

       <rule name="Rewrite sub-domain to dir">
           <match url=".*" />
           <conditions>
               <add input="{HTTP_HOST}" pattern="^admin\.mysite\.com$" />
           </conditions>
           <action type="Rewrite" url="http://example.com/admin/{R:0}" />
       </rule>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM