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.