Repository: angular
Issue: Route is overridden with base href in Location
Labels: type: bug/fix,freq2: medium,area: router,state: confirmed,router: URL parsing/generation,router: config matching/activation/validation,P3

<!--🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅

Oh hi there! 😄

To expedite issue processing please search open and closed issues before submitting a new one.
Existing issues often contain information about workarounds, resolution, or progress updates.

🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅-->


# 🐞 bug report

### Affected Package
<!-- Can you pin-point one or more @angular/* packages as the source of the bug? -->
<!-- ✍️edit: --> The issue is caused by package @angular/common


### Is this a regression?
No


### Description
I have next structure in my project:
- `APP_BASE_HREF` provided globally as value `/a/`
- Defined route `/article`

When entering `/article` page, I expect to get redirect to `/a/article`, but instead Location "helps" Router to get to `/a/rticle`, thus getting `route not found` error.


## 🔬 Minimal Reproduction
<!--
Please create and share minimal reproduction of the issue starting with this template: https://stackblitz.com/fork/angular-issue-repro2
-->
<!-- ✍️--> https://stackblitz.com/edit/angular-issue-repro2-bhrjmo

## 🔥 Exception or Error
<pre><code>
ERROR Error: Uncaught (in promise): Error: Cannot match any routes. URL Segment: 'rticle'
Error: Cannot match any routes. URL Segment: 'rticle'
    at ApplyRedirects.noMatchError (apply_redirects.ts:110)
    at CatchSubscriber.eval [as selector] (apply_redirects.ts:87)
    at CatchSubscriber.error (catchError.ts:119)
    at MapSubscriber.Subscriber._error (Subscriber.ts:145)
    at MapSubscriber.Subscriber.error (Subscriber.ts:115)
    at MapSubscriber.Subscriber._error (Subscriber.ts:145)
    at MapSubscriber.Subscriber.error (Subscriber.ts:115)
    at MapSubscriber.Subscriber._error (Subscriber.ts:145)
    at MapSubscriber.Subscriber.error (Subscriber.ts:115)
    at TapSubscriber._error (tap.ts:126)
    at resolvePromise (zone.js:814)
    at resolvePromise (zone.js:771)
    at eval (zone.js:873)
    at ZoneDelegate.invokeTask (zone.js:421)
    at Object.onInvokeTask (ng_zone.ts:262)
    at ZoneDelegate.invokeTask (zone.js:420)
    at Zone.runTask (zone.js:188)
    at drainMicroTaskQueue (zone.js:595)
</code></pre>


## 🌍  Your Environment

**Angular Version:**
<pre><code>
<!-- run `ng version` and paste output below -->
<!-- ✍️-->
Angular CLI: 8.3.20
Node: 13.1.0
OS: win32 x64
Angular: 8.2.14
... animations, common, compiler, compiler-cli, core, forms
... language-service, platform-browser, platform-browser-dynamic
... platform-server, router, service-worker

Package                                    Version
--------------------------------------------------------------------
@angular-devkit/architect                  0.803.20
@angular-devkit/build-angular              0.803.20
@angular-devkit/build-optimizer            0.803.20
@angular-devkit/build-webpack              0.803.20
@angular-devkit/core                       8.3.20
@angular-devkit/schematics                 8.3.20
@angular/cdk                               8.2.3
@angular/cli                               8.3.20
@angular/pwa                               0.803.20
@ngtools/webpack                           8.3.20
@nguniversal/express-engine                8.1.1
@nguniversal/module-map-ngfactory-loader   8.1.1
@schematics/angular                        8.3.20
@schematics/update                         0.803.20
rxjs                                       6.5.3
typescript                                 3.5.3
webpack                                    4.41.2
</code></pre>

**Anything else relevant?**
It would be great to have Location service overridable so I can add some custom [normalize ](https://github.com/angular/angular/blob/master/packages/common/src/location/location.ts#L122) logic, but I'm unable to do so since base href field inside Location is private