Jump to content
fil79

mod_rewrite .htaccess

Recommended Posts

fil79

Boas

Estou a tentar usar o mod_rewrite (apache), para reescrever URL amigáveis.

Acontece que não consigo de maneira nenhuma, meter isto a funcionar, não faz nada:

RewriteEngine on

RewriteRule /teste/([0-9]+) /index.php?id=$1 [PT,L]

o módulo está activo no Apache.

Desde já agradeço


MCITP-MCTS-MCP

Share this post


Link to post
Share on other sites
fil79

Reescrever o url. mas ao digitar dominio.com/index.php?id=1, não faz absolutamente nada.

E tirei este exemplo de um tutorial onde garantia que funcionava.


MCITP-MCTS-MCP

Share this post


Link to post
Share on other sites
mjamado

É ao contrário...

Em primeiro lugar, se dominio.com/index.php?id=1 não faz nada, tens algo errado no teu site, porque isso é o caminho directo. Se no próprio caminho directo não está a acontecer nada, é grave, e não tem nada que ver com o mod_rewrite.

Depois, o que a regra que apresentaste faz é encaminhar os pedidos no formato dominio.com/teste/1 para dominio.com/index.php?id=1, e não o inverso.


"Para desenhar um website, não tenho que saber distinguir server-side de client-side" - um membro do fórum que se auto-intitula webdesigner. Temo pelo futuro da web.

Share this post


Link to post
Share on other sites
fil79

expliquei-me mal, quando referi que não fazia nada ao digitar dominio.com/index.php?id=1, era unicamente em relação relação ao mod_rewrite. A página carrega bem e tudo o resto.

Em relação à regra ficará assim:

RewriteRule index.php?id=$1([0-9]+) /teste [PT,L] ?


MCITP-MCTS-MCP

Share this post


Link to post
Share on other sites
mjamado

Ok, do princípio: o que é que queres que aconteça e como é que tens o teu sistema de ficheiros?


"Para desenhar um website, não tenho que saber distinguir server-side de client-side" - um membro do fórum que se auto-intitula webdesigner. Temo pelo futuro da web.

Share this post


Link to post
Share on other sites
mjamado

Reescrever o url passando dominio.com/index.php?id=1  para dominio.com/teste/1

Isto é, tens um ficheiro "index.php" na pasta "1", dentro da pasta "teste"? Não é isso, pois não?

O que tu queres é o inverso, e para isso serve a primeira regra que aqui colocaste. Quando acedes ao URL directo, a página vai responder sempre - pois se o ficheiro está lá! - e quando acedes ao URL a reescrever, também, obedecendo à regra.


"Para desenhar um website, não tenho que saber distinguir server-side de client-side" - um membro do fórum que se auto-intitula webdesigner. Temo pelo futuro da web.

Share this post


Link to post
Share on other sites
fil79

Isto é, tens um ficheiro "index.php" na pasta "1", dentro da pasta "teste"? Não é isso, pois não?

O que tu queres é o inverso, e para isso serve a primeira regra que aqui colocaste. Quando acedes ao URL directo, a página vai responder sempre - pois se o ficheiro está lá! - e quando acedes ao URL a reescrever, também, obedecendo à regra.

exacto, o que pretendo é o inverso, continuo sem conseguir


MCITP-MCTS-MCP

Share this post


Link to post
Share on other sites
brunoais

mostra a árvore de ficheiros e pastas que tens, sff


"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Share this post


Link to post
Share on other sites
fil79

Se eu usar esta expressão teste/([0-9]+) /index.php?id=$1 [PT,L]

recebo um erro 500.


MCITP-MCTS-MCP

Share this post


Link to post
Share on other sites
brunoais

Suponho ser isto:

/([^/]*)/.*?(\d+)$

Nota: não testado


"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Share this post


Link to post
Share on other sites
edgarfelix

Experimento algo do género:

<IfModule mod_rewrite.c>

RewriteEngine on

RewriteRule ^teste/([0-9-]+)/?$ /teste.php?id=$1 [NC,L]

</IfModule>

---

^ - Significa o início da regra

$ - Significa o fim da regra

/? - Significa uma barra opcional (ou seja, a reescrita acontecerá para URL do tipo omeudominio.com/teste e omeudominio.com/teste/)

Na última parte temos o que são chamados de flags. NC corresponde a no case (ignora a diferença entre maiúsculas e minúsculas) e  L corresponde a last (quando essa regra for utilizada, nenhuma outra regra será usada).

Share this post


Link to post
Share on other sites
brunoais

^ - Significa o início da regra

$ - Significa o fim da regra

Errado!

^ - Significa o início da string (neste caso é o url)

$ - Significa o fim da string (neste caso é o url)

/? - Significa uma barra opcional (ou seja, a reescrita acontecerá para URL do tipo omeudominio.com/teste e omeudominio.com/teste/)

? - Significa que o caracter anterior ocorre 0 ou 1 vezes (digamos que o significado é que o caracter anterior (segundo:edgarfelix) é opcional).


"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Share this post


Link to post
Share on other sites
edgarfelix

Errado!

^ - Significa o início da string (neste caso é o url)

$ - Significa o fim da string (neste caso é o url)

? - Significa que o caracter anterior ocorre 0 ou 1 vezes (digamos que o significado é que o caracter anterior (segundo:edgarfelix) é opcional).

LOL!

Em nenhum momento referi que  o carácter antes de ? significava um carácter opcional! Mas enfim, interpreta como achares melhor. Neste caso, referia que tendo isto /? (e sim sei que o carácter anterior ocorre 0 ou 1 vezes) seria para poder aceder a um URL com ou sem barra no fim, isto é, quando digitares a URL poderias ou não usar a barra.

Quando digo "Significa o início da regra / Significa o fim da regra" referia-me também a uma string, e uso a palavra "regra" para realçar que aquela string iria definir uma regra para a respectiva URL.

Mas tudo bem, com isto só demonstras que nem se quer interpretaste devidamente o que foi escrito.

🤔

Share this post


Link to post
Share on other sites
yoda

... e  L corresponde a last (quando essa regra for utilizada, nenhuma outra regra será usada).

A flag L serve para terminar uma série de condições dentro do módulo e enviar o resultado alterado para o módulo seguinte na ordem de inclusão do php.ini. Ou seja, esta flag não termina o processamento do Mod_Rewrite, mas sim passa o resultado de casa instrução em que se encontra para o módulo seguinte (ex: Mod_Alias)

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.