Mod_rewrite ne fonctionne pas pour une URL commençant en% (pour cent signe)
-
09-09-2019 - |
Question
Il y a plusieurs liens pointant vers un site où je gère le webmaster par erreur inclus un espace entre le nom de domaine et le nom de la page:
www.domain.com/ page.html
Lorsque l'utilisateur clique, cela donne
www.domain.com/%20page.html
Je voudrais utiliser mod_rewrite pour rediriger visites à l'adresse incorrecte à l'adresse correcte, mais ma règle de réécriture ne fonctionne pas . Je l'ai essayé ce qui suit sans succès:
rewriterule ^\%20page.html$ /page.html [R=301,L] rewriterule ^.20page.html$ /page.html [R=301,L]
Comment puis-je écrire une règle pour attraper cette adresse? Je voudrais garder le PageRank et ne pas être pénalisé pour un lien brisé, et je ne peux pas obtenir le webmaster pour fixer ses liens .
La solution
Mettre l'espace dans votre RewriteRule. Probablement par le mod_rewrite temps voit, il a été décodé.
Autres conseils
Utilisez un espace littéral, protégée par un antislash il ne se termine pas l'expression régulière:
RewriteRule ^\ page.html$ /page.html [R=301,L]
Vous pouvez utiliser quelque chose comme ça pour supprimer tous les caractères de contrôle:
RewriteRule ^([^\x00-\x19\x7F]*)[\x00-\x19\x7F]+(.*) /$1$2 [L,R=301]
Et pour votre caractère d'espace supplémentaire:
RewriteRule ^([^\x00-\x20\x7F]*)[\x00-\x20\x7F]+(.*) /$1$2 [L,R=301]