mod_rewrite avec des espaces dans les urls
-
03-07-2019 - |
Question
Je dois configurer certaines règles RewriteRules pour rediriger une URL contenant un espace. J'ai essayé ceci:
RewriteRule ^article/with%20spaces.html$ /article/without_spaces.html [R=301,L]
... mais ça ne marche pas. Mettre dans un espace au lieu de% 20 provoque une erreur de 500 serveur interne. Comment ajouter un espace?
La solution
Essayez de placer un \ devant votre espace pour y échapper.
RewriteRule ^article/with\ spaces.html$ /article/without_spaces.html [R=301,L]
Autres conseils
Vous pouvez simplement échapper à l'espace avec un \
RewriteRule ^article/with\ spaces.html$ /article/without_spaces.html [R=301,L]
Si vous souhaitez éviter la complexité liée à l'échappement de chaque espace (par exemple, si vous envisagez de générer ce fichier automatiquement), vous pouvez simplement utiliser des guillemets:
RewriteRule "^article/with spaces.htmlRewriteRule "^article/with spaces.html<*>quot; "/article/without_spaces.html" [R=301,L]
quot; /article/without_spaces.html [R=301,L]
De plus, ces guillemets peuvent être utilisés pour inclure n'importe quel argument attendu:
<*>RewriteRule ^article/with[\ |%2520]spaces.html$ /article/without_spaces.html [R=301,L]
La première option remplace un espace tandis que la seconde remplace% 20 dans l’url.
Ah, j'ai trouvé une solution: utilisez le style regex pour afficher un espace:
RewriteRule ^article/with\sspaces.html$ ...
Cependant, je suppose que cela correspondrait également à tous les autres caractères d'espacement (tabulations, etc.), mais je ne pense pas que cela va poser trop de problèmes.