301 перенаправление на веб-сайте Azure ASP.Net Core - PullRequest
0 голосов
/ 26 августа 2018

Google запутывается в том, какую страницу индексировать, хотя все это хорошо объясняется в карте сайта.

Я создал правило перенаправления в web.config для перенаправления трафика с чистого листа на www, и это прекрасно работает

 <rule name="Redirect to www" patternSyntax="Wildcard" stopProcessing="true">
        <match url="*" />
        <conditions>
          <add input="{HTTP_HOST}" pattern="example.com" />
        </conditions>
        <action type="Redirect" url="https://www.example.com/{R:0}" redirectType="Permanent" />
      </rule>

Я пытаюсь создать второе правило для перенаправления домена / home / indexи домен / индекс для root, но я не могу.Ниже не работает.Я пробовал несколько вариантов с различными регулярными выражениями в полях шаблона, но ничего не работает.

    <rule name="Redirect index" patternSyntax="Wildcard" stopProcessing="true">
      <match url="*" />
      <conditions>
        <add input="{HTTP_HOST}" pattern="example.com/home/index" />
      </conditions>
      <action type="Redirect" url="https://www.example.com/" redirectType="Permanent" />
    </rule>

Ответы [ 2 ]

0 голосов
/ 27 августа 2018

В ASP.NET Core (MVC6) мы можем использовать пользовательский Middle Ware для достижения этой цели.

Вот простой пример для ознакомления.

Сначала создайте класс Middle Ware. Согласно вашему требованию, я создал его для вас, как показано ниже:

using ASPNETCore.Test;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
using System.Threading.Tasks;

namespace ASPNETCore.Middleware
{
    public class MyMiddleware
    {
        private RequestDelegate _nextDelegate;
        private IServiceProvider _serviceProvider;

        public MyMiddleware(RequestDelegate nextDelegate, IServiceProvider serviceProvider)
        {
            _nextDelegate = nextDelegate;
            _serviceProvider = serviceProvider;        
        }

        public async Task Invoke(HttpContext httpContext)
        {
            string requestURL = httpContext.Request.Path.ToString().ToLower();

            //redirect domain/home/index and domain/home to domain
            if (requestURL.Contains("/home/index")||requestURL.EndsWith("/home"))
            {
                httpContext.Response.Redirect("/");
            }
            // redirect domain/home/something  to domain/something
            else if (requestURL.Contains("/home/"))
            {
                Regex reg = new Regex("/home/(.+)");
                Match match = reg.Match(requestURL);
                string value = match.Groups[1].Value;
                httpContext.Response.Redirect("/"+ value);
            }else{

                await _nextDelegate.Invoke(httpContext);
            }

        }
    }
}

Тогда мы можем использовать его в Configure методе в Startup классе, как показано ниже:

enter image description here

Я проверил это, и это сработало. Надеюсь, это будет полезно.

0 голосов
/ 26 августа 2018

Это добилось цели.Это преобразует URL в нижний регистр, перенаправляет домен / home / index и домен / home в домен, а домен / home / что-то в домен / что-то.Также добавляет www к голому домену.

Возможно, это должно быть поведение по умолчанию?

Пожалуйста, дайте мне знать, если есть лучший способ

<rewrite>
  <rules>
    <rule name="Convert to lower case" stopProcessing="false">
      <match url=".*[A-Z].*" ignoreCase="false" />
      <action type="Redirect" url="{ToLower:{R:0}}" redirectType="Permanent" />
    </rule>
    <rule name="Redirect index" patternSyntax="Wildcard" stopProcessing="true">
      <match url="home/index" />
      <action type="Redirect" url="https://www.example.com" redirectType="Permanent" />
    </rule>
    <rule name="Redirect home" patternSyntax="Wildcard" stopProcessing="true">
      <match url="home" />
      <action type="Redirect" url="https://www.example.com" redirectType="Permanent" />
    </rule>
    <rule name="Redirect home2" patternSyntax="Wildcard" stopProcessing="true">
      <match url="home/*" />
      <action type="Redirect" url="https://www.example.com/{R:1}" redirectType="Permanent" />
    </rule>
    <rule name="Redirect to www" patternSyntax="Wildcard" stopProcessing="true">
      <match url="*" />
      <conditions>
        <add input="{HTTP_HOST}" pattern="^example.com" />
      </conditions>
      <action type="Redirect" url="https://www.example.com/{R:0}" redirectType="Permanent" />
    </rule>
  </rules>

...