Запретить AddRedirectToWwwPermanent () добавлять «www» в начало * .azurewebsites.net в ASP.NET Core 2.1 - PullRequest
0 голосов
/ 02 октября 2018

Когда я развертываю свой веб-сайт как веб-приложение Azure, мое правило перезаписи AddRedirectToWwwPermanent() добавляет «www».перед передней частью лазурного URL по умолчанию, например www.myproject.azurewebsites.net.Использование «www» с поддоменом приводит к тому, что страница не загружается.

Есть ли способ пропустить правило перезаписи AddRedirectToWwwPermanent() специально для *.azurewebsites.net URL?

I'mв настоящее время используется Rewriter в Startup.cs:

app.UseRewriter(new RewriteOptions()
    .AddRedirectToWwwPermanent()
);

В качестве альтернативы, есть ли способ перенаправить URL *.azurewebsites.net на мой собственный домен?Я пробовал следующее, но это не работает:

app.UseRewriter(new RewriteOptions()
    .AddRedirect(@"myproject.azurewebsites.net", @"www.example.com", StatusCodes.Status301MovedPermanently)
    .AddRedirectToWwwPermanent()
);

Обновление, также пробовал:

app.UseRewriter(new RewriteOptions()
        .AddRedirect(@"https://myproject.azurewebsites.net", @"https://www.example.com", StatusCodes.Status301MovedPermanently)
        .AddRedirectToWwwPermanent()
    );

Ответы [ 4 ]

0 голосов
/ 01 февраля 2019

Так же, как небольшое изменение в ответе Уэллспринг.Если вы хотите, чтобы домен azurewebsites.net оставался работающим, вы можете сделать следующее:

public class RedirectAzureWebsitesRule : IRule
{
    public void ApplyRule(RewriteContext context)
    {
        HttpRequest request = context.HttpContext.Request;
        HostString host = context.HttpContext.Request.Host;

        if (host.HasValue && host.Value.ToLower().Contains(".azurewebsites.net"))
        {
            //if we are viewing on azure's domain - skip the www redirect
            context.Result = RuleResult.SkipRemainingRules;
        }
        else
        {
            context.Result = RuleResult.ContinueRules;
        }
    }
}

Это обеспечит возможность работы на обоих доменах (если вам это нужно):

app.UseRewriter(new RewriteOptions()
    .Add(new RedirectAzureWebsitesRule())
    .AddRedirectToWwwPermanent()
);
0 голосов
/ 03 октября 2018

Вот мое решение, которое работает в ASP.NET Core 2.1.Тем не менее, я не знаю, является ли это наиболее эффективным способом сделать перенаправление, поэтому я открыт для лучших предложений.

Поскольку я не смог заставить работать встроенное правило AddRedirect() (Я все еще думаю, что, возможно, я просто использовал его неправильно), я создал собственное правило перезаписи для выполнения перенаправления.

Вот мой RedirectAzureWebsitesRule, который перенаправляет *.azurewebsites.net в пользовательский домен:

public class RedirectAzureWebsitesRule : IRule
{
    public int StatusCode { get; } = (int)HttpStatusCode.MovedPermanently;

    public void ApplyRule(RewriteContext context)
    {
        HttpRequest request = context.HttpContext.Request;
        HostString host = context.HttpContext.Request.Host;

        if (host.HasValue && host.Value == "my-project.azurewebsites.net")
        {
            HttpResponse response = context.HttpContext.Response;
            response.StatusCode = StatusCode;
            response.Headers[HeaderNames.Location] = request.Scheme + "://" + "www.example.com" + request.PathBase + request.Path + request.QueryString;
            context.Result = RuleResult.EndResponse;
        }
        else
        {
            context.Result = RuleResult.ContinueRules;
        }
    }
}

Затем в Startup.cs я вызвал новое правило, прежде чем AddRedirectToWwwPermanent():

app.UseRewriter(new RewriteOptions()
    .Add(new RedirectAzureWebsitesRule())
    .AddRedirectToWwwPermanent()
);
0 голосов
/ 05 декабря 2018

Вы должны добавить это:

.AddRedirect("^your-site.azurewebsites.net$", "https://www.Your-Site.com/{R:0}", StatusCodes.Status301MovedPermanently)
0 голосов
/ 03 октября 2018

Вы можете добавить правило перенаправления на файл web.config вашего сайта.Это можно сделать, добавив следующее правило перезаписи в файл web.config в папке wwwroot.Если у вас нет файла web.config, вы можете создать его и просто вставить в него текст ниже, просто измените имена хостов в соответствии с именами хостов вашего сайта:

<configuration>
  <system.webServer>  
    <rewrite>  
        <rules>  
          <rule name="Redirect rquests to default azure websites domain" stopProcessing="true">
            <match url="(.*)" />  
            <conditions logicalGrouping="MatchAny">
              <add input="{HTTP_HOST}" pattern="^yoursite\.azurewebsites\.net$" />
            </conditions>
            <action type="Redirect" url="http://www.example.com/{R:0}" />  
          </rule>  
        </rules>  
    </rewrite>  
  </system.webServer>  
</configuration>  

Для получения более подробной информации, вы можете обратиться к этой статье .

Этого можно добиться, Сопоставив существующее настраиваемое DNS-имя с Azure Web Apps , вот статья .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...