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

djthyrax

[Resolvido] .htaccess (Apache)

20 mensagens neste tópico

Boas.

Tenho um problema em mãos que sinto poder ser resolvido por um .htaccess. Ora, pegando no domínio exemplo.com, www.exemplo.com passa a ser ola.exemplo.com. O meu problema é que eu quero redireccionar todos os pedidos www.exemplo.com para ola.exemplo.com, mas, qd o path é www.exemplo.com/ola/qq coisa, quero redireccionar para ola.exemplo.com/qq coisa.

Como posso fazer isto? (Nunca mexi em nada que possa envolver .htaccess, e preciso disto com urgência.)

Cumps. :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Thanks. Pegando no teu código,

RedirectMatch ^/ola/(.+?)$ http://ola.exemplo.com/$1

Isto funcionaria para os /ola/qq coisa.

Agora, o caso torna-se um pouco mais complicado.

Imaginemos isto:

www.exemplo.com/ola -> ola.exemplo.com

www.exemplo.com/wiki -> não redireccionar

www.exemplo.com/outra coisa qq -> sub.exemplo.com/outra coisa qq

Como fazer isto? Ou seja, redireccionar tudo excepto o que está debaixo de /wiki?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Só para não estar a dar exemplos que não servem para nada, explica-me o seguinte:

Deste o exemplo do subdomínio "ola", óbvio que isto é um exemplo. Mas o que tu pretendes fazer é apenas para um subdomínio ou para todos excepto o wiki? Ou seja:

www.exemplo.com/abc -> abc.exemplo.com

www.exemplo.com/naz -> naz.exemplo.com

www.exemplo.com/djthyraxsucks -> djthyraxsucks.exemplo.com

É isto que queres, exceptuando o subdomínio wiki? Ou apenas queres que um único subdomínio seja redireccionado?

É que eu não percebi bem o último exemplo... e o que era suposto fazer.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tipo, eu quero que ele redireccione tudo excepto aquilo o que eu indicar que não, ou seja, a wiki não redirecciona.

EDIT: aqui fica um desenho:

463282Sem título.png

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Era preciso uma imagem para isso? :P De qualquer forma continuaste sem responder à minha pergunta...

Se queres que apenas o "ola" seja redireccionado fazes:

RedirectMatch ^/ola/(.+?)$ http://ola.exemplo.com/$1'>http://ola.exemplo.com/$1 (como mostraste no teu post anterior)

Redirect / http://ola.exemplo.com

Mas se quiseres para qualquer "palavra", tens de fazer como disse antes:

RedirectMatch ^/(.+?)/(.+?)$ http://$1.exemplo.com/$2

Redirect / http://ola.exemplo.com

Só para ter a certeza que percebeste isto...

Quanto à cena do wiki pode ser mais complicado ou não. Se o que tu queres é apenas uma "palavra" ou várias especificas e não queres que sejam todas (que é o que a expressão regular faz) fazes desta forma:

RedirectMatch ^/ola/(.+?)$ http://ola.exemplo.com/$1'>http://ola.exemplo.com/$1

RedirectMatch ^/[^wiki]/? http://ola.exemplo.com

EDIT:

Aliás, se tu queres mesmo apenas o "ola" e negar o redireccionamento do "wiki" ate podes fazer assim:

Redirect /ola http://ola.exemplo.com

RedirectMatch ^/[^wiki]/? http://ola.exemplo.com

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

RedirectMatch ^/ola/(.+?)$ http://ola.exemplo.com/$1

RedirectMatch ^/[^wiki]/? http://ola.exemplo.com/$1

Com isto, se eu meter:

Em relação à 1ª regra, www.exemplo.com/ola/ ele redirecciona para ola.exemplo.com/. All good.

Em relação à segunda, www.exemplo.com/lolada ele redirecciona para ola.exemplo.com/lolada, www.exemplo.com/lolada/lolz/lix para ola.exemplo.com/lolada/lolz/lix e www.exemplo.com/wiki fica na mesma, tal como www.exemplo.com/wiki/ola.

Certo?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ya, em principio. Não testei para o caso www.exemplo.com/wiki/ola, mas penso que funciona...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Desculpa, mas crashei o PC e não editei a msg. Depois de ver o teu edit, aquilo parece-me funcionar para o que eu quero desde que redireccione o /ola/ e não redireccione o que tiver /wiki/*. No futuro, posso querer adicionar mais excepcções, como o posso fazer?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Já vi que não pescas nada de expressões regulares :P Fazes algo como:

[^wiki|^shit|^outra]

O '^' dentro de [] nega o que vier a seguir. E o '|' é tipo um "ou". Esclarecido?

EDIT:

O que eu disse acima está completamente errado!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Já vi que não pescas nada de expressões regulares :P Fazes algo como:

[^wiki|^shit|^outra]

O '^' dentro de [] nega o que vier a seguir. E o '|' é tipo um "ou". Esclarecido?

Sir, yes sir. Se soubesse expressões regulares não passava a vida a fazer explode() :)

Obrigado, depois dou notícias sobre isto. :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Para não criar um novo post.....

Pegando no site www.exemplo.com, eu queria criar um sistema de urls limpas, ou seja, se eu escrever www.exemplo.com/imagens/1, eu quero que o server execute o ficheiro index.php/imagens/1, não quero redirectionar...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ele quer redireccionar internamente /imagens/1 para, por exemplo, processar.php?uri=/imagens/1

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

fnds3000

Isto deve funcionar:

RewriteRule ^(.*) index.php/$1

DICA:

google->mod_rewrite tutorial

é mais simples do que parece

PS: cool thread

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sim é isso, já tinha resolvido o problema, mas ainda não tinha o postado aqui, já posto aqui o codigo........

Edit:

Options -Indexes
Options +FollowSymLinks
<IfModule mod_php5.c>
php_value register_globals                0
php_value session.auto_start              0
</IfModule>
<IfModule mod_rewrite.c>
RewriteEngine On
        RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f [OR]
RewriteCond %{REQUEST_URI} !^/theme/(style/|js/|images/)
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
</IfModule>

Vamos á explicação:

1ªlinha - Não permite ver as directorias

2ªlinha - Se o mod_php5 está activo......

2ªlinha - ....Desactiva as variáveis globais.....

3ªlinha - ....deswactiva o session auto start

5ªlinha - se o mod_rewrite está activo.....

6ªlinha - ...enicia o rewite Engine

7ªlinha - ...define o directorio base

8ªlinha - ...se o requeste uri é um ficheiro e....

9ªlinha - ...está na directoria /theme/js/ | /theme/css/ | /theme/images/ pára aqui e mostra o ficheiro, se não....

10ªlinha - ....redirecciona internamente para index.php?q=

ou seja, num simples código consigo proteger as directorias e os ficheiros que estão lá dentro e criar uma página de ERRO 404,

ex1:www.example.com/fnds3000 -> redirecciona internamente -> www.example.com/index.php?q=fnds3000

ex2:www.example.com/theme/images/banner.jpg ->se o ficheiro existir mostra-o, se não redirectiona ->www.example.com/index.php?q=theme/images/banner.jpg

e estava eu todo contente, quando me surgiu um problema com as codificações da uri, o firefox por predefinição codifica em utf-8, enquanto o opera codifica em ISO-8859-1,:

http://www.example.com/O+P%C3%A1ssaro/ca%C3%A7ou/um+r%C3%A9ptil%21/  _utf-8  _firefox  _nao funciona

http://www.example.com/O+Passaro/ca%C3%A7ou/um+r%C3%A9ptil%21/  _utf-8  _firefox  _funciona

http://www.example.com/O+P%E1ssaro/ca%E7ou/um+r%E9ptil%21/  _ISO-8859-1  _opera  _funciona

no primeiro caso o apache simplesmente ignora o ficheiro .htaccess, alguém sabe qual é o problema?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não percebi o problema, mas os urls devem ser codificados com uma coisa estilo urlencode. Está aí qq coisa que não percebo, um 'á' passa a ser um 'a' ?!? esquisito.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Giro giro, era tu mostrares os headers de cada request para vermos o que pode estar a causar isso.

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