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?

user199337
fonte

Respostas:

684

Você pode fazer um redirecionamento relativo:

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

ou

window.location.href = '/path'; //relative to domain
Kobi
fonte
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.

Prumo
fonte
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 ../

Chris Ballance
fonte
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.

Kornel
fonte
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'
Jorge Santos Neill
fonte
0

tente seguir o código js

location = '..'

Kamil Kiełczewski
fonte