htaccess reescreve as regras para corresponder aos params dinâmicos

1

Meu URL base é assim.

http://localhost/test/s/beer-drinks

E, dependendo da entrada do usuário, pode ser algo assim.

http://localhost/test/s/beer-New-York-drinks_alcoholic-No_rating-2-3_price-1-3_page-2   

A parte em que diz "cerveja" pode ser qualquer string que seja a string de pesquisa real que o usuário insere.

A parte em que diz "Nova York" pode ser qualquer cidade e o usuário tem a opção de definir ou não a configuração.

O usuário também tem a opção de definir ou não definir valores para o seguinte.    alcoólatra pode ter um valor de Não ou Sim    A classificação pode ser um valor de 1 a 5 e vários valores são separados por um -    preço pode ser um valor de 1 a 5 e vários valores são separados por um -    page é um número que indica o deslocamento da paginação

Eu queria direcionar o URL acima e ser capaz de passar os valores da string de pesquisa real ("cerveja"), ignorar a correspondência da cidade e passar os valores de alcoólatra, classificação, preço e página, se estiverem definidos .

Eu tenho algo parecido com isso no meu htaccess

RewriteRule ^search$ s/ [R=301,L]
RewriteRule ^search/$ s/ [R=301,L]

RewriteRule ^s/(.*)-drinks_alcoholic-(.*)_rating-(.*)_price-(.*)_page-(.*) search/q_$1/alcoholic_$2/rating_$3/price_$4/page_$5/
    .
    .
    .
RewriteRule ^s/(.*)-drinks_page-(.*) search/q_$1/page_$2/
RewriteRule ^s/(.*)-drinks search/q_$1/

Estou tendo dificuldade em combinar a parte da cidade sem quebrar a ordem dos jogos ($ 1, $ 2, etc).

Eu encontrei este artigo que explica os condicionais nos padrões de regex, mas parece que posso fazê-lo funcionar especialmente se página está definida.

    
por user1423172 09.10.2012 / 14:06

1 resposta

0

Eu não tenho um apache à mão para testar o que estou dizendo, mas você pode tentar usar grupos sem captura para a cidade. para que eles não quebrem sua $x order

RewriteRule ^s/(.*)(?:-[A-Za-z-]+)?-drinks_alcoholic-(.*)_rating-(.*)_price-(.*)_page-(.*) search/q_$1/alcoholic_$2/rating_$3/price_$4/page_$5/

#(            - start group
#?:           - make it non-capturing, which means it will not effect $1,$2...
#-            - if the group starts with -
#[A-Za-z-]+   - and looks like a words seperated by dashes (maybe you should enhance this a bit)
#)?           - and the entire group may appear or not

No entanto, isso pode começar a ficar confuso se o seu termo de pesquisa (cerveja) for mais do que uma palavra (vinho tinto). Minha sugestão seria usar %20 ou sublinhado para espaços em palavras e traços para separadores de argumentos.

    
por 10.10.2012 / 09:16