Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Como criar a regra para este caso: Na URL haverá sempre uma variável "categoria", e dependendo da quantidade de registros no bd, pode haver ou não a paginação que neste caso entrará uma segunda variável "page" na URL.
Se fizer assim só funciona a primeira regra:
RewriteRule /produto/([^/]+) /produtos.asp\?categoria=$1 [I,L]
RewriteRule /produto/([^/]+)/page-([0-9]+) /produtos.asp\?categoria=$1&page=$2 [I,L]
Assim, somente se houver a variável page na URL, se esta não existir, não funciona apenas com a variável "categoria"
RewriteRule /produto/([^/]+)/page-([0-9]+) /produtos.asp\?categoria=$1&page=$2 [I,L]
Att.
URL original: "site.com.br/produtos.asp?categoria=a" / nova: "site.com.br/produto/a"
De acordo com a quantidade de registros no banco, pode haver ou não a paginação que aí entrará a segunda variável. Sempre no primeiro acesso a página produtos.asp apenas a variável "categoria" será fornecida, somente após a verificação no banco é que haverá ou não a variável da paginação "page", URL original: "site.com.br/produtos.asp?categoria=a&page=1" / Nova: "site.com.br/produto/a/page/1"
Veja acima as formas que tentei sem sucesso. O meu problema em montar a expressão é que a variável "page" pode ou não ser utilizada.
Grato.
Agora entendi, teste assim
RewriteRule ^produto/([^/]+)/?$ produtos.asp?categoria=$1 [L]
RewriteRule ^produto/([^/]+)/page/(\d+)/?$ produtos.asp?categoria=$1&page=$2 [L]
Ainda não funcionou :(
Dessa forma não há acesso a página com ou sem a var page.
Edit:
Oooo Patrique, desculpa, continuei fazendo uns testes aqui e acrescentei uma barra no inicio da url e agora funcionou!
/produtos.asp?categoria=$1 [L]
Outra pergunta: O que significa esse (\d+)
Maravilha, obrigado fera.
Opa, que bom!
Em relação ao (\d+) ele valida somente dígitos, isso significa que se for digitado alguma coisa que não for número então retornará False
De uma lida aqui para saber mais sobre expressão regular
http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=6557
[]'s
Ok entendi, mas não teria o mesmo efeito de como havia utilizado antes para números: "([0-9]+)" ??
Aproveitando o gancho, estou pensando em eliminar da URL o "/produto/" ficando:
"site.com.br/categoria_produto" ou "site.com.br/categoria_produto/page/x"
Nesta página que lista os resultados em cada um deles há um link para detalhes do produto em outra página (detalhes.asp?id=123&nome=nome_produto), pergunta: Mesmo sendo em outra página eu poderia deixar a URL com o padrão acima:
"site.com.br/categoria_produto/123/nome_produto" - Se sim, como ficaria?
Grato.
Pelo que eu sei o ([0-9]+) conta apenas decimais, por isso se usa (\d+) para qualquer numeração.
Para deixar a url assim:
http://www.site.com.br/categoria_produto
http://www.site.com.br/categoria_produto/page/
Faça assim
RewriteRule ([^/]+)_produto/?$ /produtos.asp?categoria=$1
RewriteRule ([^/]+)_produto/page/(\d+)/?$ /produtos.asp?categoria=$1&page=$2
Em relação a este
http://site.com.br/categoria_produto/123/nome_produto
eu não entendi, explica ai melhor.
Editado
Acho que entendi, para aceitar o nome do produto também, seria necessário você criar outra expressão no caso seria essa
RewriteRule ([^/]+)_produto/page/(\d+)/([^/]+)/?$ /produtos.asp?categoria=$1&page=$2&nome=$3
Com isso iria aceitar o nome do produto quando fosse necessário
Fiz um code aqui para testar e foi certinho.
<%
categoria = request.querystring("categoria")
page = request.querystring("page")
nomeproduto = request.querystring("nome")
If page <> "" then
Response.Write "page: " & page
Response.Write "<br />"
End If
Response.Write "categoria: " & categoria
If nomeproduto <> "" then
Response.Write "<br />"
Response.Write "nome produto: " & nomeprodutohttp://localhost/1_produto/
http://localhost/1_produto/page/2
http://localhost/1_produto/page/2/nomeproduto
[]'s
Assim, a página "produtos.asp" conseguimos resolver, obrigado de novo, o que era:
"site.com.br/produtos.asp?categoria=xyz" ficará: "site.com.br/xyz" se entrar paginação: "site.com.br/xyz/page/x"
Nesta página produtos.asp é listado a relação dos produtos por categoria com seus respectivos links para outra página chamada: "detalhes.asp?categoria=xyz&id=123&nome=Nome_Produto" - O que eu queria saber é se é possível reescrever a url desta página detalhes para ficar como o padrão da página de produtos, ex:
De: "site.com.br/detalhes.asp?categoria=xyz&id=123&nome=Nome_Produto"
Para: "site.com.br/xyz/123/Nome_Produto"
Vlw fera.
Editei o post antes de ver sua resposta, ve lá em cima se é aquilo que você quer.
[]'s
Obrigado. Achei que poderia dar problema acessando páginas diferentes e com o primeiro parâmetro igual, mas como as páginas obrigatoriamente devem receber mais parâmetros, acredito que funcionará pelos testes rápidos que efetuei por aqui. Qualquer coisa posto de novo.
Abs e obrigado mais uma vez.
Beleza e boa sorte com o projeto.
[]'s
Não entendi muito bem o que esta pretendendo :/
De ai modelos de como quer que fique a url em ambos o caso, com ou sem paginação, exemplo.
http://www.exemplo.com.br/produto/categoria/1/pagina/2
Mostre na url como você quer que fique.
[]'s