Je voudrais mes URL actuelles:
http://example.com/files/528/Rabba%20Ho%20-%20Falak%20Shabir%20Song.html
Pour avoir l'air plus propre comme ça:
http://example.com/files/528/Rabba_Ho_-_Falak_Shabir_Song.html
Ceci est mon fichier . Htaccess actuel:
RewriteRule ^category/([^/]*)/([^/]*)\.html$ /index.php?pid=$1&ht=$2 [L]
RewriteRule ^category/([^/]*)/([^/]*)/([^/]*)\.html$ /index.php?pid=$1&page=$2&ht=$3 [L]
RewriteRule ^category/([^/]*)/([^/]*)/([^/]*)/([^/]*)\.html$ /index.php?sort=$1&pid=$2&page=$3&ht=$4 [L]
RewriteRule ^filedownload/([^/]*)/([^/]*)/([^/]*)\.html$ /fileshow.php?pid=$1&id=$2&ht=$3 [L]
Comment le modifier pour réécrire les espaces codés et les traits de soulignement?
Voici une question similaire sur StackOverflow: mod_rewrite: remplacer les traits de soulignement par des tirets
J'ai modifié la réponse pour remplacer les espaces (décodés% 20) par un trait de soulignement. Cela fonctionne en appliquant de manière récursive une règle de réécriture tant qu'il y a deux correspondances ou plus, puis une fois qu'il n'y en a plus qu'une, une règle de réécriture séparée effectue la redirection.
RewriteEngine On
RewriteRule ^(/?files/.*/[^/]*?)\s([^/]*?\s[^/]*)$ $1_$2 [N]
RewriteRule ^(/?files/.*/[^/]*?)\s([^/\s]*)$ /$1_$2 [R=301]
Comme d'autres l'ont commenté, vous devez vous assurer que votre application attend des traits de soulignement dans le chemin d'URL et génère des URL comportant le trait de soulignement.
D'abord désolé pour mon mauvais anglais. J'utilise ceci dans mes liens PHP apps:
<?php $theURL = "http://example.com/files/528/Rabba Ho - Falak Shabir Song.html"; ?>
<a href="<?= str_replace( " ", "_", $theURL ); ?>" target="_blank">
Rabba Ho - Falak Shabir Song
</a>
EDIT: Désolé pour la dernière erreur, je modifie maintenant ...
Le code ci-dessus renvoie une URL telle que:
http://example.com/files/528/Rabba_Ho_-_Falak_Shabir_Song.html.