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

Sign in to follow this  
jcfr

alterar url

Recommended Posts

jcfr

boas pessoal, mais uma vez recorro à vossa ajuda e desde já obrigado....

é o seguinte as páginas que tenho ou enviam dados entre elas por post ou por get (como é normal), e quando é usado o get o link aparece do género:

www.mypage.com/pasta/ficheiro.php?var1=multigelados&var2=manuel&var3=variavel3

entretanto vi algumas páginas como esta:

http://www.keyword.pt/anuncios/empresa/MARGENS-FORMACAO-E-ACTIVIDADES-TURISTICAS-E-RECREATIVAS-LDA-/

em que o url é alterado mostrando valores como se fossem pastas

alguém me sabe dizer como fazer isto?

desde já muito obrigado pela ajuda.

Share this post


Link to post
Share on other sites
jcfr

nunca trabalhei com o .htacess mas vou tentar...

e não existe nenhuma função php ou outra linguagem que altere o link? assim podia criar um script k recebesse as variáveis que eu cria mostrar e colocalas lá de uma forma muito simples senão lá tenho de recorrer ao .htacess

muito obrigado

Share this post


Link to post
Share on other sites
mjamado
e não existe nenhuma função php ou outra linguagem que altere o link? assim podia criar um script k recebesse as variáveis que eu cria mostrar e colocalas lá de uma forma muito simples senão lá tenho de recorrer ao .htacess

Podes fazê-lo com header('Location: url_do_script'); mas não te aconselho: isso vai fazer com que os utilizadores andem a ser jogados de sítio para sítio, com os consequentes pedidos e respostas. Além disso, as directorias têm mesmo que existir.

O mod_rewrite é mesmo o caminho a seguir, vê lá se esta posta no meu site pessoal serve para as tuas dúvidas (é exactamente para o caso que falas).


"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

Convém ter em conta, ao usar o mod_rewrite, que a ordem dos parametros é indispensável ter uma lógica.

Lógico, mas isso deve ter sempre. A vantagem dos "endereços humanos" é que as pessoas possam decorá-lo facilmente, e a lógica de construção do mesmo é parte fundamental.

Por exemplo: Quero ir à loja do site X (www.sitex.com/loja), ver um candeeiro (/candeeiros) chamado "Candeeiro XPTO" (/candeeiro-xpto).

P.S: agora foi engraçado, o domínio sitex.com está registado...  :D


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

Sim, mas nos endereços normais pode-se descurar mais essa questão. Além disso, depende do método que se usar no mod_rewrite. Se for uma coisa simples, tem que haver mesmo uma ordem lógica, senão, tem de se fazer um script mais complexo.

edit : o que pars uns é trivial, para outros que não estão tão dentro do assunto é novo e bom de saber logo :D

Share this post


Link to post
Share on other sites
mjamado
edit : o que pars uns é trivial, para outros que não estão tão dentro do assunto é novo e bom de saber logo :D

Ah, não te tinha percebido.

Pensei que estivesses a apontar uma limitação do mod_rewrite, mas na verdade estavas a alertar o jcfr para a questão...


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

obrigado pela ajuda mas isto estám a dar cabo da cabeça vou continuar a olhar pa isto e se tiver algum problema que nao consiga mesmo resolver coloco aqui a duvidaentretanto qualquer coisa que achem util agradeço e desde ja obrigado pela ajuda

Share this post


Link to post
Share on other sites
jcfr

nem por isso mas as vezes sim...

o que eu tenho neste momento no .htaccess é isto:

RewriteEngine On
RewriteBase /
RewriteRule ^(.+)/([0-9]+)/?$ pagina.php?id=$1

isto faz com que ao eu colocar

http://www.mypage.com/6

me abra o link

http://www.mypage.com/pagina.php?id=6

mas isto so funciona para a raiz da página e eu queria que o redirect fizesse algo do genero:

inseria

http://www.mypage.com/pagina/variavel

e redireccionava para

http://www.mypage.com/pagina.php?id=variavel

ou entao que ao inserir

http://www.mypage.com/pagina.php?id=variavel

simplesmente o link fosse mostrado como

http://www.mypage.com/pagina/variavel

sendo que abria na mesma o primeiro link

isso é possivel?

se sim e poderem colocar aqui um exemplo do código agradecia

Share this post


Link to post
Share on other sites
mjamado

Isso já não tem propriamente que ver com o mod_rewrite, mas mais com expressões regulares.

Se quiseres que "pagina" também seja dinâmico, fazes assim:

RewriteRule ^(.+)/([a-z]+)/([0-9]+)/?$ $1.php?id=$2

Se "pagina" for estático, fazes assim:

RewriteRule ^(.+)/pagina/([0-9]+)/?$ pagina.php?id=$2

As possibilidades com expressões regulares são verdadeiramente brutais, dá para fazer coisas do arco da velha.

P.S.: esqueci-me, mas o segundo exemplo é um redirect explícito. Leste a posta do meu site que indiquei? É só aplicar as expressões regulares indicadas e forçar o redirect.


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

Isso já não tem propriamente que ver com o mod_rewrite, mas mais com expressões regulares.

Se quiseres que "pagina" também seja dinâmico, fazes assim:

RewriteRule ^(.+)/([a-z]+)/([0-9]+)/?$ $1.php?id=$2

Se "pagina" for estático, fazes assim:

RewriteRule ^(.+)/pagina/([0-9]+)/?$ pagina.php?id=$2

As possibilidades com expressões regulares são verdadeiramente brutais, dá para fazer coisas do arco da velha.

P.S.: esqueci-me, mas o segundo exemplo é um redirect explícito. Leste a posta do meu site que indiquei? É só aplicar as expressões regulares indicadas e forçar o redirect.

experimentei a primeira opção ficando assim

RewriteEngine On
RewriteRule ^(.+)/([a-z]+)/([0-9]+)/?$ $1.php?id=$2

mas não funciona, se colocar

http://www.mypage.com/pagina/variavel

por exemplo www.mypage.com/aveiro/aradas

abre uma página em branco e se colocar

www.mypage.com/aveiro/aradas/

diz que não encontra a página

o que é que estou a fazer mal?

Share this post


Link to post
Share on other sites
jcfr

De notar que usar a palavra "página" no url, é um pouco .. antiquado e contra a filosofia de uso do mod_rerwite para Human Readable URL's.

a unica coisa que eu queria com isto é mesmo que as variáveis não aparecessem aparecendo apenas os seus valores... e que podesse usar a mesma regra para enviar para a página que eu quizer independentemente da página que seja....

isto sem ter de enviar variaveis pelo method post claro

ou o ideal era mesmo conseguir nem apresentar o nome do ficheiro no link mas isso já tou farto de tentar e não consigo a não ser que ficque pré-definido que tem de ir sempre para uma determinada página....

mas não estou a conseguir

Share this post


Link to post
Share on other sites
jcfr

Ah, esquece, percebi mal. :thumbsup:

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule .* pagina.php/$0 [PT]

exactamente, mas com um unico problema assim vai encaminhar-me sempre para a página pagina.php e eu queria que isso tb fosse dinamico.

experimentei colocando

www.mypage.com/variavel

e resultou, como era de esperar

mas queria que também funcionasse para outras paginas

e nao sei é possivel mas o ideal era tanto a página como a quantidade de variaveis, os nomes das variaveis e os valores das variaveis serem dinamicos. ou seja nao ter numero fixo de variaveis ou entao poder adicionar uma regra para cada página que eu precise se isso for possivel, fazer distinção de páginas e usar regras diferentes.

o exemplo que deste obrigam a encaminhar sempre para a mesma página...

o exemplo que deste faz exactamente o mesmo que eu tinha inicialmente....

Share this post


Link to post
Share on other sites
yoda

Para que queres a irem parar a páginas diferentes? Não faz grande sentido ..

Para cada um ir parar a uma página diferente, tens de controlar essas variáveis minuciosamente, porque se por exemplo um user mete uma "pagina" que nao existe, leva com um 404 em cima.

btw, esse código é suposto ser usado para :

www.mypage.com/pagina/variavel

Share this post


Link to post
Share on other sites
jcfr

Para que queres a irem parar a páginas diferentes? Não faz grande sentido ..

Para cada um ir parar a uma página diferente, tens de controlar essas variáveis minuciosamente, porque se por exemplo um user mete uma "pagina" que nao existe, leva com um 404 em cima.

btw, esse código é suposto ser usado para :

www.mypage.com/pagina/variavel

axo que me expliquei mal....

o que eu quero é que a regra sirva para várias páginas, ou seja

quero meter www.mypage.com/pagina1/variavel

e abrir

www.mypage.com/pagina1.php?id=variavel

e noutra ocasião inserir o url www.mypage.com/pagina2/variavel2

e abrir

www.mypage.com/pagina2.php?id=variavel2

ou o ideal mesmo era poder utilizar páginas minhas onde eu fizesse o encaminhamento para

www.mypage.com/pagina2.php?id=variavel2

e o url mostrado fosse

www.mypage.com/pagina2/variavel2

ou

simplesmente

www.mypage.com/variavel2

Share this post


Link to post
Share on other sites
jcfr

porque quero que funcione para várias páginas, para a página de apresentação dos dados das empresas, para a página de apresentação dos produtos da empresa, e depois existem páginas de particulares etc etc etc.... quero que funcione para todas e se tiver uma pre definida nao funciona para as outras

Share this post


Link to post
Share on other sites
sc0rpion

Pois mas o que o yoda está a dizer é para concentrares toda a programação num único ficheiro (normalmente index.php) e teres uma variável que controle qual a página que queres.

Em vez de teres pagina.php, pagina2.php, etc., passas a ter index.php?pagina=pagina&var1=x&var2=y e index.php?pagina=pagina2&var1=x&var2=y. No ficheiro index.php verificas o tipo de página e, consoante seja válido ou não, tratas as restantes variáveis.

Fazendo uma analogia com o joomla a tua variável pagina seria o option.

Considerando o teu exemplo o que tu deverias ter seria algo do tipo:

site.com/apresentacao/ --> site.com/index.php?pagina=apresentacao

site.com/apresentacao/empresaX --> site.com/index.php?pagina=apresentacao&var1=empresaX

site.com/apresentacao/empresaY --> site.com/index.php?pagina=apresentacao&var1=empresaY

site.com/produtos/ --> site.com/index.php?pagina=produtos

site.com/produtos/tide --> site.com/index.php?pagina=produtos&var1=tide

Se estiver errado na ideia corrijam-me :thumbsup:

Share this post


Link to post
Share on other sites
jcfr

sim seria uma boa ideia, o meu problema é que ja tenho a página criada e a funcionar, ou seja nao convem tar a alterar td agora, é uma boa ideia a usar numa próxima vezmas agora ja nao me convém muito...

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
Sign in to follow this  

×

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.