Jump to content
fnds

[.htaccess] Redirectionar

Recommended Posts

fnds

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".

Share this post


Link to post
Share on other sites
Battousai

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.

Share this post


Link to post
Share on other sites
djthyrax

Faz-te match do /.


Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum!

Share this post


Link to post
Share on other sites
fnds

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]

Share this post


Link to post
Share on other sites
fnds

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.

Share this post


Link to post
Share on other sites
fnds

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]

Share this post


Link to post
Share on other sites
djthyrax

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 peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum!

Share this post


Link to post
Share on other sites
fnds

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 :/

Share this post


Link to post
Share on other sites
djthyrax

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 /?

Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum!

Share this post


Link to post
Share on other sites
fnds

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

Share this post


Link to post
Share on other sites
djthyrax

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/

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


Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum!

Share this post


Link to post
Share on other sites
fnds

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

Share this post


Link to post
Share on other sites
djthyrax

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.


Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum!

Share this post


Link to post
Share on other sites
fnds

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.

Share this post


Link to post
Share on other sites
djthyrax

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ê?

Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum!

Share this post


Link to post
Share on other sites
fnds

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.

Share this post


Link to post
Share on other sites
djthyrax

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.


Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum!

Share this post


Link to post
Share on other sites
fnds

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.

Share this post


Link to post
Share on other sites
fnds

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

Share this post


Link to post
Share on other sites
fnds

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.

Share this post


Link to post
Share on other sites
djthyrax

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.


Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum!

Share this post


Link to post
Share on other sites
fnds

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.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.