web-dev-qa-db-fra.com

Le problème mod_rewrite ne fonctionnera pas si les liens contiennent "-"

Je cherche dans mod_rewrite mon simple PHP CMS depuis quelques jours maintenant et j'ai trouvé une règle qui était supposée fonctionner pour moi:

RewriteRule ^(\w+)/?$ view_post.php?url=$1

Ceci est supposé prendre www.example.com/example-post vers la page view_post.php et interroger la publication à partir d'une base de données. Cela ne fonctionne pas s'il y a - (tirets) dans le nom. Cependant, si j'essaie www.example.com/examplepost, cela fonctionnera car je peux voir le chargement de la page view_posts.php et le code SQL construit correctement, mais aucun contenu ne se charge car, de toute évidence, cela ne correspond à rien dans la base de données.

Je pourrais vous proposer plusieurs solutions. L'une serait d'essayer d'interroger la base de données avec les deux tirets et sans, facilement supprimée du texte avec substr, mais j'aimerais que cette règle de réécriture fonctionne avec des tirets. bien pour l'instant. C'est probablement quelque chose lié à l'expression rationnelle, mais cela dépasse ma compréhension.

Toute aide sera très appréciée!

1
TuxMeister

Vous devez inclure le - (trait d'union) dans votre correspondance de règle. Changer la ligne pour:

RewriteRule ^([\w\-]+)/?$ view_post.php?url=$1

marchera.

1
hjpotter92

Évidemment, cela ne fonctionne pas car - n'est pas un caractère Word.

Vous devez changer le \w en . qui correspond à tout caractère autre qu'une nouvelle ligne.

En procédant ainsi, tous les chemins d’URL, à l’exception de la page d’accueil, seront dirigés.

0
Itai