Comment modifier toutes les URL contenant des traits de soulignement en tirets mais uniquement pour un répertoire

Je travaille sur un site en direct, donc je ne veux pas créer d’erreurs de serveur en faisant une erreur. Je dois remplacer toutes les URL contenant des traits de soulignement par des tirets, mais uniquement pour un seul répertoire (www.domain.com/directory/), mais je ne souhaite pas modifier les fichiers image, css ou js.

Tout ce que j’ai eu jusqu’à présent pour mon .htaccess est:

RewriteRule ^([^_]*)_([^_]*_.*) $1-$2 [N] RewriteRule ^([^_]*)_([^_]*)$ /$1-$2 [L,R=301] 

Mais je ne sais pas comment spécifier cette règle pour un seul spécifique et exclure mes fichiers images, css et javascript.

Des idées?

Pour limiter la règle à certaines requêtes, vous devez utiliser RewriteCond . Vous pouvez trouver la documentation sur ceux- ci .

Pour que cela ne fonctionne que pour www.domain.com/directory/ vous pouvez l’append à RewriteRule lui-même. Veuillez noter que vous utilisez une redirection permanente, de sorte que tout changement que vous apportez actuellement ne fonctionnera pas tant que vous n’aurez pas effacé le cache du navigateur de votre site.

 RewriteRule ^directory/([^_]*)_([^_]*_.*) /directory/$1-$2 [N] RewriteRule ^directory/([^_]*)_([^_]*)$ /directory/$1-$2 [L,R] 

Pour exclure les fichiers css et js, vous pouvez utiliser quelque chose comme ceci. Cela exclura ( ! ) Les fichiers se .css par .css ou .js ( \.(css|js) ).

 RewriteCond %{REQUEST_URI} !\.(css|js)$ RewriteRule ^directory/([^_]*)_([^_]*_.*) /directory/$1-$2 [N] RewriteRule ^directory/([^_]*)_([^_]*)$ /directory/$1-$2 [L,R] 

Je ne peux pas tester ces règles et je vous encourage à configurer un serveur localhost simple pour tester les choses avant de les faire sur votre site en direct. Si vous testez des redirections sur un site, utilisez toujours des redirections temporaires ( [R] ) au lieu de redirections permanentes ( [R=301] ). Les redirections permanentes sont mises en cache par le navigateur et réduisent la charge sur le serveur pour les demandes ultérieures, mais si vous testez, il se souviendra d’une tentative précédente. Modifiez uniquement les redirections temporaires en redirections permanentes lorsque toutes les règles fonctionnent comme vous le souhaitez.