Redirecionando para um URL relativo em JavaScript


363

Estou com um problema: quero redirecionar via JavaScript para um diretório acima. Meu código:

location.href = (location.href).substr(0, (location.href).lastIndexOf('folder'));

O URL fica assim:

example.com/path/folder/index.php?file=abc&test=123&lol=cool

O redirecionamento afeta exatamente isso:

example.com/path/&test=123&lol=cool

Mas quer ter isso:

example.com/caminho/

Como eu pude fazer isso?

Respostas:


684

Você pode fazer um redirecionamento relativo:

window.location.href = '../'; //one level up

ou

window.location.href = '/path'; //relative to domain

29
veja por que você deve usar o window.location.replace stackoverflow.com/questions/503093/…
— gideon

52
Quando você deseja simular um link, você deve usar window.location.href. Você deve usar apenas window.location.replacequando quiser simular um redirecionamento http (não gerando um item de histórico).
— Benji XVI

24
A propósito, document.locationfoi concebido como uma propriedade somente leitura. É mais seguro de usar window.location. Veja esta pergunta .
— Benji XVI

6
Eu achei usando window.location.href = '../'redirecionado para a raiz do site e não "um nível acima", conforme o esperado. Quando a página atual é "www.example.com/customers/list", eu precisava usar './'. Eu acho que isso ocorre porque "lista" não é considerado como um nível de diretório.
— Marcus Cunningham

2
@MarcusCunningham, no seu exemplo, o diretório é / customers / - então "um nível acima" é www.example.com/. Agora, se o seu exemplo de URL fosse www.example.com/customers/list/ - ele o redirecionaria para www.example.com/customers/
— Ubeogesh

12

Se você usar location.hostname, receberá a parte domain.com. Em seguida location.pathname, você receberá / caminho / pasta. Eu dividiria location.pathnamepor / e remontaria a URL. Mas, a menos que você precise da string de consulta, basta redirecionar ..para ir para um diretório acima.


Meu navegador late quando eu vou location.path e parece reconhecer apenas location.pathname . Dicas?
— Konrad Viltersten

location.path está incorreto, deve ser location.hostname. Adicionei uma edição à postagem para corrigir isso.
— ygrichman

8

redirecionar para ../


Se o seu aplicativo estiver hospedado em uma sub-uri e o aplicativo não souber o caminho da sub-uri. Se você estiver na raiz de seus aplicativos e o fizer ../, o aplicativo não saberá como voltar à sua raiz. Por exemplo, o mesmo aplicativo está hospedado em example.com/myapp e other.example.com/app2
— ReggieB


5

<a href="..">no JS needed</a>

.. significa diretório pai.


14
Isso requer um clique ou alguma outra navegação iniciada pelo usuário.
— recursivo

2

Estou tentando redirecionar meu site atual para outra seção da mesma página, usando JavaScript. Este código a seguir funciona para mim:

location.href='/otherSection'

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.