2010-11-10 6 views
2

Je suis presque avec une règle mod_rewrite, mais je l'ai cédé :)mod_rewrite remplacer '_' avec '-'

je dois réécrire

country/[countryname].php 

à

country/[countryname]/ 

cependant [countryname] peut avoir un trait de soulignement comme ceci: « south_africa.php » et si elle ne je veux le remplacer par un hypen: « afrique du sud/»

Je veux aussi faire correspondre si le pays a des numéros qui le suivent: 'france03.php' à 'france /'

Voici ma règle, c'est presque là mais ça ajoute toujours un trait d'union même s'il n'y a pas de deuxième partie après le souligner.

RewriteRule ^country/(.*)_(.*?)[0-9]*\.php$ country/$1-$2 [R=301,L] 

donc actuellement 'pays/south_.php' devient 'pays/sud /'

Quelqu'un peut-il me s'il vous plaît aider à trouver la pièce manquante du puzzle? Merci.

+0

OK, je suis un peu confus - vous ne le faites pas ** ** Voulez-vous remplacer 'south_.php' par' sud-.php'? Qu'en est-il de 'south_1.php',' south_12.php'? Pouvez-vous avoir des chiffres ailleurs, comme dans 'south_a1b34.php'? – Kobi

+0

désolé je ne l'ai pas très bien expliqué! On dirait que je l'ai trié. On m'a dit qu'il n'y aurait jamais d'URL comme ça. Suffisant pour moi. –

Répondre

3

Essayez ceci:

RewriteRule ^country/([^_]*)_([^_]*?)\d*\.php$ country/$1-$2 [R=301,L] 

Cette règle correspondra avec un trait de soulignement urls simple - vous aurez besoin d'une autre règle pour plus underscores ou pas.

Si vous voulez vous assurer que $2 ne contient que des lettres et n'est pas vide, remplacez-la par ([^_]*?) à ([a-zA-Z]+).

2

Sinon, vous pouvez le faire sur plusieurs passes:

# If request is for something in "country/" 
RewriteCond %{REQUEST_URI} ^country/.+\.php$ 

# Replace underscore and digits with (single) hyphen 
RewriteRule [_0-9]+ \- 

# Remove extension (and possible trailing hyphen) 
RewriteRule ^(.*)-?\.php$ $1 

# Final rewrite 
RewriteRule ^country/(.*)$ country/$1 [R=301,L] 

... et non testé pas nécessairement "joli" :)