Skip to content
This repository was archived by the owner on Apr 12, 2024. It is now read-only.

Commit 2bc62ce

Browse files
committed
fix($location): default to / for the url base if no base[href]
With the recent refactoring of $location service we changed this behavior resulting in a regression. Previously we thought that html5 mode always required base[href] to be set in order for urls to resolve properly. It turns out that base[href] is problematic because it makes anchor urls (#foo) to always resolve to the base url, which is almost always incorrect and results in all anchors links and other anchor urls (e.g. svg references) to be broken. For this reason, we should now start recommending that people just deploy to root context (/) and not set the base[href] when using the html5 mode (push/pop history state). If it's impossible to deploy to the root context then either all urls in the app must be absolute or base[href] must be set with the caveat that anchor urls in such app won't work. Closes #2762
1 parent cd3dd13 commit 2bc62ce

File tree

2 files changed

+15
-2
lines changed

2 files changed

+15
-2
lines changed

src/ng/location.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -496,12 +496,12 @@ function $LocationProvider(){
496496
function( $rootScope, $browser, $sniffer, $rootElement) {
497497
var $location,
498498
LocationMode,
499-
baseHref = $browser.baseHref(),
499+
baseHref = $browser.baseHref(), // if base[href] is undefined, it defaults to ''
500500
initialUrl = $browser.url(),
501501
appBase;
502502

503503
if (html5Mode) {
504-
appBase = baseHref ? serverBase(initialUrl) + baseHref : initialUrl;
504+
appBase = serverBase(initialUrl) + (baseHref || '/');
505505
LocationMode = $sniffer.history ? LocationHtml5Url : LocationHashbangInHtml5Url;
506506
} else {
507507
appBase = stripHash(initialUrl);

test/ng/locationSpec.js

+13
Original file line numberDiff line numberDiff line change
@@ -635,6 +635,19 @@ describe('$location', function() {
635635
}
636636
);
637637
});
638+
639+
640+
it('should set appBase to serverBase if base[href] is missing', function() {
641+
initService(true, '!', true);
642+
inject(
643+
initBrowser('http://domain.com/my/view1#anchor1', ''),
644+
function($rootScope, $location, $browser) {
645+
expect($browser.url()).toBe('http://domain.com/my/view1#anchor1');
646+
expect($location.path()).toBe('/my/view1');
647+
expect($location.hash()).toBe('anchor1');
648+
}
649+
);
650+
});
638651
});
639652

640653

0 commit comments

Comments
 (0)