2009-01-04 12 views
33

J'ai besoin de configurer RewriteRules pour rediriger une URL qui contient un espace. J'ai essayé ceci:mod_rewrite avec des espaces dans les URL

RewriteRule ^article/with%20spaces.html$ /article/without_spaces.html [R=301,L] 

... mais cela ne fonctionne pas. Mettre dans un espace au lieu de% 20 provoque une erreur interne du serveur 500. Comment ajouter un espace?

Répondre

53

Essayez de mettre un \ devant votre espace pour y échapper.

RewriteRule ^article/with\ spaces.html$ /article/without_spaces.html [R=301,L] 
+2

cheers! J'aurais pensé que ce serait quelque chose de simple comme ça. – nickf

1

Ah, j'ai trouvé une solution: utiliser le style de regex pour montrer un espace:

RewriteRule ^article/with\sspaces.html$ ... 

Bien, je pense que cela correspondrait à tous les autres personnages blancs aussi (onglets, etc.), mais Je ne pense pas que ça va être un gros problème.

12

Vous pouvez simplement échapper à l'espace avec un \

RewriteRule ^article/with\ spaces.html$ /article/without_spaces.html [R=301,L] 
8
RewriteRule ^article/with[\ |%2520]spaces.html$ /article/without_spaces.html [R=301,L] 

La première option permet de remplacer un espace tandis que le second remplace codé en dur% 20 dans l'url.

+0

Cela devrait avoir les meilleurs votes. Mais hélas! Le timing dépend des votes. –

6

Si vous voulez éviter la complexité d'échapper à chaque espace (par exemple, si vous envisagez d'avoir ce fichier généré automatiquement), vous pouvez simplement utiliser des guillemets:

RewriteRule "^article/with spaces.html$" /article/without_spaces.html [R=301,L] 

De plus, ces citations peuvent être utilisés pour envelopper tout argument attendu:

RewriteRule "^article/with spaces.html$" "/article/without_spaces.html" [R=301,L] 
Questions connexes