Forum Pplware
Rewrite Rules .htaccess que confuso - Versão de Impressão

+- Forum Pplware (http://forum.pplware.com)
+-- Fórum: Mais Tech (/forumdisplay.php?fid=11)
+--- Fórum: Programação e Web (/forumdisplay.php?fid=16)
+--- Tópico: Rewrite Rules .htaccess que confuso (/showthread.php?tid=7169)



Rewrite Rules .htaccess que confuso - maghnetico - 17-09-2010 19:36

Boas!
Tenho um site em php com o modulo mod_rewrite ligado.
Pretendo re-escrever as urls do tipo www.site.com/index.php?menu=xxxx para www.site.com/xxxx

E para isso puz a seguinte regra no .htaccess que funciona perfeitamente:

RewriteEngine on
RewriteRule ^([^/\.]+)/?$ /index.php?menu=$1 [L]

mas tenho um outro problema: existe outra variável que é "stock" ou seja tenho ficheiros a apontar para www.site.com/index.php?stock=55

como faço para alem de reescrever a variavel "menu", reescrever também a variavel "stock"

Esta regra não funciona: RewriteRule ^([^/\.]+)/?$ /index.php?stock=$1 [L]
alem disto, queria que fosse reescrito para http://www.site.com/pastacategoria/55

o php processa-se todo no meu index.php

Gratos!


RE: Rewrite Rules .htaccess que confuso - Bruno Bernardino - 17-09-2010 19:46

O teu problema é que estás a dizer ao Apache que qualquer coisa que esteja em http://www.site.com/YYY "seja executado" como http://www.site.com/index.php?menu=YYY e não o contrário.

Daí que, tens de conseguir "identificar" no Apache se é um menu ou stock.. assim de cabeça (não sei se funciona, testa e diz), terias de fazer algo como:

RewriteEngine on
RewriteRule ^(stock/([^/\.]+)/?$ /index.php?stock=$1 [L]
RewriteRule ^(menu/[^/\.]+)/?$ /index.php?menu=$1 [L]

Para que conseguisses separar por http://www.site.com/stock/YYY e http://www.site.com/menu/YYY

Outra forma, seria enviares as duas variáveis seguidas, do tipo http://www.site.com/YYY/KKK

em que YYY seria o menu, e KKK o stock:

RewriteEngine on
RewriteRule ^([^/\.]+)/?$ /index.php?menu=$1&stock=$2 [L]


RE: Rewrite Rules .htaccess que confuso - maghnetico - 17-09-2010 20:10

Não funcionou... Sad
O que aconteceu foi um internal server error
Não sei se é por as pastas stock e menu nao existirem de facto no servidor.

Mantive a regra inicial que tinha e acrescentei apenas a regra ^(stock/([^/\.]+)/?$ /index.php?stock=$1 [L] mas sem a palavra stock ou seja ficou assim:

RewriteEngine on

RewriteRule ^([^/\.]+)/?$ /index.php?stock=$1 [L]
RewriteRule ^([^/\.]+)/?$ /index.php?menu=$1 [L]

e funcionou (!?) ou seja igual ao que tinhas mas na ordem que me deste (primeiro stock e dps menu).
Não sei se é disso mas de facto funcionou.. só que se meter o tal nome stock atrás (RewriteRule ^(stock/([^/\.]+)/?$ /index.php?stock=$1 [L])
dá Internal server error e o que queria de facto era escrever o link deste modo:
http://www.site.com/stock/55 e nao http://www.site.com/55.