2010-10-01 5 views
0

Je travaille sur la révision de la structure d'URL des pages de revue, qui peut être filtrée par ville, comté, nombre d'étoiles et technicien. Je veux que les pages ressemblent à des pages HTML statiques et remplacent les plus avec des traits d'union. Mon objectif: -Appliquer le nouveau style URL sans modifier la page de commentaires, juste le fichier htaccess -mettre en 301 réoriente des anciennes URL de style à de nouvelles URL de style points positifs -convert à traits d'unionBoucle infinie possible dans mod_rewrite?

Actuellement les URL d'examen ressembler à ceci:

domain.com/reviews/?city=City+Name

domain.com/reviews/?city=City+Name & page = 2

domain.com/reviews/?county=County+Name

domain.com/reviews/?county=County+Name & page = 2

domain.com/reviews/?stars=4

domain.com/reviews/?stars=4 & page = 2

domain.com/reviews/?tech=Tech+Name

domain.com/reviews/?tech=Tech+Name & page = 2

Mon but est de les faire ressembler à ceci (et 301 les anciennes URL de style pour les nouvelles URL de style):

domain.com/reviews/city/City-Name.html

domain.com/reviews/city/City-Name/page/2.html

domain.com/reviews/county/County-Name.html

domain.com/reviews/county/County-Name /page/2.html

domain.com/reviews/stars/4.html

domain.com/reviews/stars/4/page/2.html

domain.com/reviews/tech/Tech-Name.html

noms domain.com/reviews/tech/Tech-Name/page/2.html

Ville, comté et technologie ne contiennent pas toujours points positifs (c.-à-Boston vs New York +) et certains ont plus d'un plus. À l'heure actuelle c'est ce que je dois masquer les anciennes URL de style avec de nouvelles URL de style (et cela fonctionne très bien BTW):

##FIRST PAGE REVIEWS (ie. reviews/city/city-name.html) 
RewriteRule ^reviews/(.*)/(.*)\-(.*)\-(.*)\-(.*)\-(.*)\.html "/reviews/?$1=$2+$3+$4+$5+$6" [NC,L] 
RewriteRule ^reviews/(.*)/(.*)\-(.*)\-(.*)\-(.*)\.html "/reviews/?$1=$2+$3+$4+$5" [NC,L] 
RewriteRule ^reviews/(.*)/(.*)\-(.*)\-(.*)\.html "/reviews/?$1=$2+$3+$4" [NC,L] 
RewriteRule ^reviews/(.*)/(.*)\-(.*)\.html "/reviews/?$1=$2+$3" [NC,L] 
RewriteRule ^reviews/(.*)/(.*)\.html "/reviews/?$1=$2" [NC,L] 

##PAGINATED REVIEWS (ie. reviews/city/city-name/page/2.html) 
RewriteRule ^reviews/(.*)/(.*)\-(.*)\-(.*)\-(.*)\-(.*)/page/(.*)\.html "/reviews/?$1=$2+$3+$4+$5+$6&page=$7" [NC,L] 
RewriteRule ^reviews/(.*)/(.*)\-(.*)\-(.*)\-(.*)/page/(.*)\.html "/reviews/?$1=$2+$3+$4+$5&page=$6" [NC,L] 
RewriteRule ^reviews/(.*)/(.*)\-(.*)\-(.*)/page/(.*)\.html "/reviews/?$1=$2+$3+$4&page=$5" [NC,L] 
RewriteRule ^reviews/(.*)/(.*)\-(.*)/page/(.*)\.html "/reviews/?$1=$2+$3&page=$4" [NC,L] 
RewriteRule ^reviews/(.*)/(.*)/page/(.*)\.html "/reviews/?$1=$2&page=$3" [NC,L] 

La partie que j'ai des problèmes avec est 301-ment les URL de style ancien au nouveau URL de style. Voilà ce que j'ai jusqu'à présent:

RewriteCond %{QUERY_STRING} (.*)=(.*) [NC] 
RewriteRule ^reviews/(.*) /reviews/%1/%2.html? [NS,R=301,NC] 

RewriteCond %{QUERY_STRING} (.*)=(.*)&page=(.*) [NC] 
RewriteRule ^reviews/(.*) /reviews/%1/%2/page/%3.html? [NS,R=301,NC] 

Lorsque je tente cette FireFox me donne l'erreur « La page ne réoriente correctement ». Des idées?

Répondre

0

Oui, il s'agit probablement d'une boucle infinie. Utilisez THE_REQUEST au lieu d'inspecter le request line:

RewriteCond %{THE_REQUEST} ^[A-Z]+\ /[^?\ ]*\?([^=]+)=([^\ ]*)&page=([^\ ]*) [NC] 
RewriteRule ^reviews/ /reviews/%1/%2/page/%3.html? [NS,R=301,NC] 
RewriteCond %{THE_REQUEST} ^[A-Z]+\ /[^?\ ]*\?([^=]+)=([^\ ]*) 
RewriteRule ^reviews/ /reviews/%1/%2.html? [NS,R=301,NC] 

Notez que cela échouera si le nombre ou l'ordre des paramètres est différent que cela.

+0

Excellent! Merci ça a marché. La seule chose est que je devrais convertir les plus en traits d'union. Actuellement "/ reviews /? City = City + Name" vous amène à "/reviews/city/City+Name.html" où il devrait être "... City-Name.html". Aussi est-il un moyen de tout convertir en minuscules? – Yev

+0

@Yevgeniy Женя Van Chuchin: Bien que cela soit possible avec mod_rewrite, c'est plutôt compliqué car vous ne pouvez remplacer qu'un nombre fixe d'occurrences à la fois (voir par exemple http://stackoverflow.com/questions/3791548/mod-rewrite -rule-à-enforce-canonical-percent-encoding/3806538 # 3806538). Une langue de niveau supérieur est bien préférable de faire ce genre de travail. – Gumbo

+0

Je vais bien avec un montant fixe. 5 occurrences, c'est beaucoup, c'est ce que je fais dans la première partie (en masquant les anciennes URL de style avec un nouveau style). – Yev