base href is case sensitive in Angular 2

后端 未结 4 830
囚心锁ツ
囚心锁ツ 2021-01-20 20:43

I have set the base ref like this for an Angular 2 app


If I go to localhost/MyApp everything works correctly.

相关标签:
4条回答
  • 2021-01-20 21:21

    You will have to write code to override base href.

    Possible locations you can override is 1. Angular2: Make route paths case insensitive

    1. You write your own location strategy & Ignore case sensitivity there. And in your app.module.ts, you tell ur Angular 2 app to use custom location strategy in your providers section.

      {provide:LocationStrategy,useClass:CustomPlatformLocation},

    0 讨论(0)
  • 2021-01-20 21:21

    using <base href="./"> instead of <base href="MyApp"/> (implicit) solved the problem for me. the virtual directory now is case insensitive.

    0 讨论(0)
  • 2021-01-20 21:29

    I added typed base href as a route in router config with redirectTo property set to default route of the app, which is in my case is 'login', so any combination of base href will work. This is more sort of a hack.

    I wrote that code in the app.component.ts file.

    ngOnInit() {
       var baseHref  = window.location.pathname.split('/')[1];
       if(baseHref != "" && baseHref != "login")
          this.router.config.Add({path:baseHref,redirectTo:'/login',pathMatch:'full'});
    }
    

    Note:- As suggested by other answers, LowerCaseUrlSerializer didn't work for me as it requires all routes specified in my app to be in lower case only.

    0 讨论(0)
  • 2021-01-20 21:30

    I tried Parth way, but I couldn't find a way to fix my problem with the LocationStrategy approach.

    Based on some ideas from this question and ended up with something like this:

    import { DefaultUrlSerializer, UrlTree } from "@angular/router";
    
    export class LowercaseUrlSerializer extends DefaultUrlSerializer {
    
        parse(url: string): UrlTree {
    
            let urlUpperBaseUrl = url;
    
            if (url.startsWith("/app")) {
                urlUpperBaseUrl = "/APP" + url.slice(4);
            }
            if (url.startsWith("app")) {
                urlUpperBaseUrl = "APP" + url.slice(3);
            }
    
            return super.parse(urlUpperBaseUrl);
        }
    
    }
    

    You have to configure the injector as well:

    @NgModule({
        ...
        providers: [
            ...
            { provide: UrlSerializer, useClass: LowercaseUrlSerializer },
        ],
        ...
    })
    export class AppModule {
    }
    

    I hope it hepls!

    0 讨论(0)
提交回复
热议问题