2009-04-09 5 views
2

Il y a plusieurs liens pointant vers un site que je gère dans lequel le webmaster par erreur inclus un espace entre le nom de domaine et le nom de la page:Mod_rewrite ne fonctionne pas pour une URL commençant en% (pour cent signe)

 
    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 cassé, et je ne peux pas obtenir le webmaster pour réparer ses liens. Mettez l'espace dans votre RewriteRule.

+0

Vous avez un webmaster qui ne corrige pas les liens cassés? Cela semble être une situation incroyablement mauvaise. – acrosman

+0

Si les liens sont cassés, je doute que vous ayez un PageRank à tous, alors corrigez les liens. Si votre webmaster ne les corrige pas, c'est un problème majeur. C'est son travail, et c'est inexcusable qu'il les ait écrits de cette façon en premier lieu ... – rmeador

+0

Les liens proviennent d'un site externe avec lequel je n'ai plus de contact, et je préfère ne pas leur demander - ils pourraient supprimer le lien au lieu de le réparer. –

Répondre

2

Probablement au moment où mod_rewrite le voit, il a été décodé.

+0

rewriterule^.page.html $/page.html [R = 301, L] travaillé, merci! –

+0

J'espère que vous n'avez pas apage.html sinon ça va finir au mauvais endroit ... – Greg

+0

Ouais, vous devriez vraiment intégrer l'espace. RoBorg a spécifié comment vous faites cela, ce que j'aurais dû faire. – chaos

7

Utilisez un espace littéral, échappé avec une barre oblique inverse il ne se termine pas l'expression régulière:

RewriteRule ^\ page.html$ /page.html [R=301,L] 
0

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 espace supplémentaire:

RewriteRule ^([^\x00-\x20\x7F]*)[\x00-\x20\x7F]+(.*) /$1$2 [L,R=301] 
Questions connexes