javascript how to switch pathname of window.location property and redirect
Asked Answered
Z

3

12

I want to redirect a user from varying urls to a specific one. I've tried various flavors of replacing and I cant seem to get the behavior I want. This code works except I'm providing the hostname. I want to use the existing hostname from windows.location.hostname and just provide a new pathname. Sometimes the urls vary in size and slashes ('/').

window.location = 'http://localhost:36065/NewPath';

How would I change these urls?

http://somesite.com/xxx/yyy/zzz to http://somesite.com/NewPath
http://somesite.com/xxx/yyy to http://somesite.com/NewPath
http://somesite.com/xxx to http://somesite.com/NewPath

I think you get the point. The path can vary in paths, I want to replace everything after .com basically with 'NewPath'

I'd like a clean regex solution if possible but I am quite the rookie in that dept. Thanks for any tips or tricks.

Zamudio answered 13/10, 2011 at 16:30 Comment(0)
A
33
location.pathname = '/newpath.html'
Audsley answered 13/10, 2011 at 16:35 Comment(6)
Also a note, this keeps the hash in the URL, but that's probably not a problem.Ba
Not quite sure how I missed this. So simple. Thanks!Zamudio
@vsync, By setting the pathname property you maintain query params and fragment identifiers.Audsley
@JasonHarwig - just tried changing the pathname and it didn't maintain query params.. (FF30/WIN7)Currie
is there a way to change the pathname so that the browser doesn't "load" the new pathname? I know there is pushState() but i'm trying to effectively remove the most recent url from the browser history and pushState() doesn't do this.Schlosser
@Schlosser I believe the History.replaceState() method would help here.Patsy
B
4

You could always use the various location properties to recreate the part you need and append the new part to it:

window.location = location.protocol + "//" + location.hostname + "/NewPath";
Ba answered 13/10, 2011 at 16:35 Comment(2)
Indeed. I could add it, but I think @JasonHarwig has the best solution.Ba
This is missing the port and possibly the hash and the search fields. Location.origin might help here.Saleh
I
0

Just to show the hard way:

// Find everything up to the first slash and save it in a backreference
regexp = /(\w+:\/\/[^\/]+)\/.*/;

// Replace the href with the backreference and the new uri
newurl = windows.location.href.replace(regexp, "$1/dir/foo/bar/newpage.html");
Indiscernible answered 13/10, 2011 at 17:6 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.