防止AddRedirectToWwwPermanent()在ASP.NET Core 2.1中将“www”添加到 *. www.example.com的前面azurewebsites.net

eufgjt7s  于 2023-05-23  发布在  .NET
关注(0)|答案(6)|浏览(188)

当我将我的网站部署为Azure Web App时,我的AddRedirectToWwwPermanent()重写规则是将“www.”添加到默认Azure URL的前面,例如。www.myproject.azurewebsites.net .使用“www”与子域,导致页面无法加载.
是否有方法跳过专门针对*.azurewebsites.net URL的AddRedirectToWwwPermanent()重写规则?
我目前正在使用Startup.cs中的重写器:

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

或者,有没有办法将*.azurewebsites.net URL重定向到我自己的自定义域?我尝试了以下方法,但不起作用:

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()
    );
wsxa1bj1

wsxa1bj11#

下面是我的解决方案,它适用于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()
);
uklbhaso

uklbhaso2#

只是和井中的回答略有不同。如果你想保持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()
);
bvjxkvbb

bvjxkvbb3#

您可以在站点web.config文件中添加重定向规则。您可以通过将以下重写规则添加到wwwroot文件夹中的web.config文件来完成此操作。如果您没有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>

有关详细信息,请参阅article
您可以通过将现有的自定义DNS名称Map到Azure Web Apps来实现这一点,这里是article

suzh9iv8

suzh9iv84#

这应该可以工作:

.AddRedirect(@"^https?://(.+)\.azurewebsites.net(.*)$", @"https://$1.com$2", StatusCodes.Status301MovedPermanently)
vfwfrxfs

vfwfrxfs5#

正如@tj-cappelletti在评论中指出的那样,有一个新的过载使这变得容易。

app.UseRewriter(
    new RewriteOptions()
        .AddRedirectToWwwPermanent("myproject.com"));

这将重定向请求到“myproject.com“到“www.myproject.com“,但将留下任何其他(包括“*. azurewebsites.net“)单独.您甚至可以指定一个域的列表,而不仅仅是一个.

  • 当你在测试时,不要忘记这些是“永久”重定向,所以你的浏览器会缓存它们。打开浏览器的开发工具,转到网络选项卡,然后选中Disable Cache框。现在,当您访问其中一个时,您将获得当前的重定向输出。如果你不这样做,它可能看起来像所需的重定向是“仍然错误”,当你实际上已经修复它,只是有旧的数据。*
bcs8qyzn

bcs8qyzn6#

您需要添加以下内容:

.AddRedirect("^your-site.azurewebsites.net$", "https://www.Your-Site.com/{R:0}", StatusCodes.Status301MovedPermanently)

相关问题