Como reescrever estes URLs?

1

Eu sou novo em reescrever URLs. Eu estou usando um módulo de reescrita do Apache no IIS 7.5 (eu acho). De qualquer maneira, eu posso reescrever com sucesso, mas estou tendo problemas em algumas coisas importantes.

Eu quero que esse URL bonito seja reescrito para o seguinte URL:

mydomain.com/bike/1234 (pretty) 
mydomain.com/index.cfm?Section=Bike&BikeID=1234 (ugly)

Isso funciona muito bem com essa regra:

RewriteRule ^bike/([0-9]+)$ /index.cfm?Section=Bike&BikeID$1

Edição nº 1

Eu quero poder adicionar uma descrição e colocá-la exatamente no mesmo lugar, para que as informações úteis sejam completamente ignoradas pelo meu aplicativo.

mydomain.com/bike/1234/a-really-great-bike (pretty and useful)
mydomain.com/index.cfm?Section=Bike&BikeID=1234

Edição nº 2

Eu preciso adicionar um segundo ou terceiro parâmetro e valor ao URL para obter informações adicionais para o banco de dados, assim:

mydomain.com/bike/1234/5678
mydomain.com/index.cfm?Section=Bike&BikeID=1234&FeatureID=5678

Isso funciona usando esta regra:

RewriteRule ^bike/([0-9]+)/([0-9]+)$ /index.cfm?Section=Bike&BikeID=$1&FeatureID=$2

Mais uma vez, preciso adicionar algumas informações extras, como no primeiro exemplo:

mydomain.com/bike/1234/5678/a-really-great-bike (pretty and useful)
mydomain.com/index.cfm?Section=Bike&BikeID=1234&FeatureID=5678

Então, como posso combinar essas regras para que eu possa ter um ou dois ou três parâmetros e qualquer uma das "palavras úteis" seja completamente ignorada?

    
por Evik James 17.06.2012 / 01:01

1 resposta

2

Estou assumindo que isso é o Apache e não o IIS, com base em seus exemplos. Você deve realmente aprender como as expressões regulares funcionam, porque as regras de reescrita são basicamente sobre descobrir a expressão regular.

Esta regra de regravação deve fazer o que você deseja:

RewriteRule ^bike/([0-9]+)/ /index.cfm?Section=Bike&BikeID$1
RewriteRule ^bike/([0-9]+)/([0-9]+)/ /index.cfm?Section=Bike&BikeID=$1&FeatureID=$2

O caractere $ é a âncora de fim de linha, o que significa que a expressão só coincidirá se a sequência de entrada terminar nesse ponto. Ao remover o $ , removemos esse requisito e, portanto, ignoramos todos os caracteres finais.

    
por 17.06.2012 / 05:59