Mod_rewrite не работает для URL, начинающегося в% (знак процента) - PullRequest
2 голосов
/ 09 апреля 2009

Есть несколько ссылок, указывающих на сайт, которым я управляю, на котором веб-мастер по ошибке включил пробел между именем домена и именем страницы:

    www.domain.com/ page.html

Когда пользователь нажимает, это дает

    www.domain.com/%20page.html

Я бы хотел использовать mod_rewrite для перенаправления попаданий на неправильный адрес на правильный адрес, но мое правило перезаписи не работает . Я безуспешно пробовал следующее:

    rewriterule ^\%20page.html$ /page.html [R=301,L]
    rewriterule ^.20page.html$ /page.html [R=301,L]

Как я могу написать правило для перехвата этого адреса? Я бы хотел сохранить PageRank и не быть оштрафованным за неработающую ссылку, и я не могу заставить веб-мастера исправить его ссылки.

Ответы [ 3 ]

7 голосов
/ 09 апреля 2009

Используйте буквальный пробел, экранированный обратной косой чертой, чтобы он не заканчивал регулярное выражение:

RewriteRule ^\ page.html$ /page.html [R=301,L]
2 голосов
/ 09 апреля 2009

Поместите пробел в ваш RewriteRule. Вероятно, к тому времени, когда mod_rewrite увидит его, он будет декодирован.

0 голосов
/ 15 апреля 2009

Вы можете использовать что-то вроде этого, чтобы удалить все управляющие символы:

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

А для вашего дополнительного пробела:

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