• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

fnds

[.htaccess] Redirectionar

25 mensagens neste tópico

Eu tenho três formas de aceder à mesma pasta:

- http://ola.exemplo.com/adeus/

- http://adeus.ola.exemplo.com/

- http://www.adeus.com/

O que eu quero fazer é que quando se acede a partir das duas primeiras o utilizador seja redirectionado para a treceira.

Já consegui +/- redirectionar a primeira,

RedirectMatch ^/adeus/(.*)$ http://www.adeus.com/$1

Só que esta solução tem um problema, se eu colocar http://www.adeus.com/adeus/, se não tiver barra ("/") não há problema, ele redirectiona para http://www.adeus.com.

O .htaccess está dentro da pasta "adeus".

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Poes [/] ( ou [\/] se tiveres que escapar o caracter ) que torna a barra opcional, o problema passa a ser é que tás a pegar no conteúdo à frente. não sei se vai fazer algum conflito. é experimentares, se não der acrescentas uma linha.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ok, mas isso não é para o meu problema... (Até piora :P )

Como faço para redirectionar a segunda?

Dá para fazer uma coisa do género?

[pre]se o host == adeus.ola.exemplo.com

    redirectionar para www.adeus.com[/pre]

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Já consegui fazer aquilo que queria. :P

RedirectMatch 301 ^/adeus/(.*)$ http://www.adeus.com/$1
Redirect 301 /adeus http://www.adeus.com/

Options +FollowSymLinks
RewriteEngine on
RewriteCond %{HTTP_HOST} ^adeus.ola.exemplo.com|^adeus.com [NC]
RewriteRule ^(.*)$ http://www.adeus.com/$1 [L,R=301]

Ainda vou tentar corrigir um erro, para que quando eu introduzir  http://www.adeus.com/adeus'>http://www.adeus.com/adeus/'>http://www.adeus.com/adeus'>http://www.adeus.com/adeus/ ou  http://www.adeus.com/adeus'>http://www.adeus.com/adeus ele não redirectionar para http://www.adeus.com.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Isto é mais um monologo que uma discução!, mas pronto...

A solução é esta:

Options +FollowSymLinks
RewriteEngine on

#Redirectiona de adeus.ola.exemplo.com e de adeus.com para www.adeus.com
RewriteCond %{HTTP_HOST} ^adeus.ola.exemplo.com|^adeus.com [NC]
RewriteRule ^(.*)$ http://www.adeus.com/$1 [L,R=301]

#Redirectiona de ola.exemplo.com/adeus/ para www.adeus.com
RewriteCond %{HTTP_HOST} ^ola.exemplo.com [NC]
RewriteCond %{REQUEST_URI} ^/adeus/ [NC]
RewriteRule ^(.*)$ http://www.adeus.com/$1 [L,R=301]

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

A última rewriterule embora funcione, não está correcta. Ele vai matchar /blablabla e vai redireccionar para www.adeus.com//blablabla, repara nas 2 /.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

A última rewriterule embora funcione, não está correcta. Ele vai matchar /blablabla e vai redireccionar para www.adeus.com//blablabla, repara nas 2 /.

Não vai não, não sei onde estás a ver duas barras :/
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não vai não, não sei onde estás a ver duas barras :/

Se ele vai matchar para o $1 /blablabla e tu estás a redireccionar para http://www.adeus.com/$1, já reparaste que ficam 2 /?
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Fds, alguem aqui não está a perceber!

Eu acho que o $1 é em relação ao que está depois do ola.exemplo.com/adeus/. De qualquer maneira (não sei porquê, mas gostava de saber :P) se eu introduzir um url com 2 / ele ao redirectionar coloca só 1 / :s

Ex: ola.exemplo.com/adeus/duas//barras//o  ---> www.adeus.com/duas/barras/o

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Troca 2 barras por 1 porque o httpd foi clever e fez sanitizing ao endereço. É o mesmo que pedires http://xpto.com/ois/./../,'>http://xpto.com/ois/./../, ele vai-te automaticamente levar para http://xpto.com/

Dá para desactivar isso? (É que eu não tenho interesse nengum em qeu isso aconteça...)

No entanto, não deixa de ser errado estares a redireccionar para xpto.com//ois/

Eu acho que o $1 é em relação ao que está depois do ola.exemplo.com/adeus/.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Dá para desactivar isso? (É que eu não tenho interesse nengum em qeu isso aconteça...)

Não tens???

Tu estás a falar da segunda rewritecond, eu tou a falar da 1a.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tu estás a falar da segunda rewritecond, eu tou a falar da 1a.

Ahhhhhhhhhhhhhhhhhhhh, bem me parecia que algo não estava bem aqui, tu é que tás a confundir o people todo...

A última rewriterule embora funcione, não está correcta. Ele vai matchar /blablabla e vai redireccionar para www.adeus.com//blablabla, repara nas 2 /.

Não tens???

Não, eu quero passar tudo exactamente igual.
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ahhhhhhhhhhhhhhhhhhhh, bem me parecia que algo não estava bem aqui, tu é que tás a confundir o people todo...

My bad then.

Não, eu quero passar tudo exactamente igual.

Posso perguntar porquê?
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Imagina que quero usar o mod_rewrite para fazer umas urls amigaveis e essa url tem duas barras, como por exemplo as imagens do hdd...

adeus.com//fnds//imagem//1 ---> passava para ---> www.adeus.com/fnds/imagem/1

mas eu queria que não se modificasse.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

URL amigável é diferente. Fazes "redirect" apenas local para um script php controlador. Se não tiveres nenhum handler para isso, aí sim, o httpd vai-te fazer a estrutura correcta para o URI.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tás a confundir tudo...

Imagina que eu tenho um site implementado com 100K links do género adeus.ola.com//imagens//fds e comprei um dominio www.adeus.com, eu só quero que o utilizador quando for redirectionado o link se mantanha tal e qual:

adeus.ola.com//imagens//fds ---> www.adeus.com//imagens//fds

As URLs amigáveis já é com o servidor www.adeus.com.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Rui Carlos, foi só um exemplo, eu disse URL amigável porque é o nome que dou à "tecnologia".

Voltando ao problema, dá para manter o url sem alterações?

adeus.ola.com//imagens//fds ---> www.adeus.com//imagens//fds

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

No entanto, não deixa de ser errado estares a redireccionar para xpto.com//ois/

Fiz agora o teste e tu estás errado, em relação aos dois, como eu tenho está 100% correcto.

Não devias de afirmar tanto uma coisa sem teres a certeza de que estás correcto.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu não estou a confundir, tu é que ainda não percebeste como funciona. :D E não, eu não estou errado.

A correcção do URI apenas existe quando não usas qualquer rewriterule ou redirect. Ou seja, a correcção do /lulz/./..///ois/ para /ois/ existe quando fazes o pedido a adeus.com mas sim em www.adeus.com e apenas se não usares também aí nenhuma rewriterule. Se não tiveres nenhuma rewriterule nem nenhum handler para esse URI, o apache vai procurar o ficheiro no filesystem, e faz sanitizing ao URI para não sair do documentroot do httpd/vhost.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu não estou a confundir, tu é que ainda não percebeste como funciona. :D E não, eu não estou errado.

A correcção do URI apenas existe quando não usas qualquer rewriterule ou redirect. Ou seja, a correcção do /lulz/./..///ois/ para /ois/ existe quando fazes o pedido a adeus.com mas sim em www.adeus.com e apenas se não usares também aí nenhuma rewriterule. Se não tiveres nenhuma rewriterule nem nenhum handler para esse URI, o apache vai procurar o ficheiro no filesystem, e faz sanitizing ao URI para não sair do documentroot do httpd/vhost.

Eu estava-me a referir a isto (se calhar não exclareci este ponto):

A última rewriterule embora funcione, não está correcta. Ele vai matchar /blablabla e vai redireccionar para www.adeus.com//blablabla, repara nas 2 /.

e toda a discussão consequente, eu como tenho não redirecciono para www.adeus.com//blablabla, e para ver se redireccionava ou não, eu tirei uma barra e ele redireccionou para www.adeus.comblablabla.
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora