Мы используем красивые URL-адреса на нашем сайте. Несколько лет назад у меня был внешний техник, который добавил обратные ссылки. Он проделал большую работу, но в одном случае постоянно добавлял ссылку с завершающим пробелом.
https://www.example.com/item/item/%20
Это было проиндексировано как %20
, и я вижу в своих отчетах по обратным ссылкам, что существует 87 сайтов, которые указывают на URL-адрес с %20
в конце.
Если я смогу перенаправить это, то моя страница /item/item/
получит 87 обратных ссылок.
Мы используем правила перезаписи, и я испробовал здесь каждое решение по переполнению стека, но ни одно из них не сработало. Некоторые нерабочие решения:
RewriteEngine on
RewriteRule ^(.*[^\ ])\ +$ /$1
RedirectRule (.*)\s$ $1 [R=301]
RewriteRule ^(.*/|)[\s%20]+(.+)$ $1$2
Пробовал редирект 301, тоже не работает.
redirect 301 /item/item/%20 /item/item/
redirect 301 /item/item/+ /item/item/
Некоторые вещи, которые помогают - это не шаблон для всего сайта. Это всего лишь один конкретный URL-адрес, который был неправильно распространен в мире. И нигде в строке нет пробела — он всегда в конце.
Спасибо.
Для меня также было бы неплохо преобразовать завершающий %20
в известный символ, такой как a, потому что я мог бы перенаправить его /item/item/-
в item/item/
/item/item/
полностью виртуальным или каким-то образом связано с файловой системой? - person MrWhite   schedule 17.01.2020RewriteRule
шаблону, декодируется на %, однако не все переменные сервера декодируются. пробел является разделителем - если аргумент содержит пробел, вы можете заключить весь аргумент в двойные кавычки (или убрать пробел с обратной косой черты - как вы сделали, или использовать класс сокращенных символов\s
в регулярном выражении). обычная кодировка URL-адреса, такая как +, также не используется.+
(закодированное пространство) применяется только к части строки запроса URL-адреса. В URL-пути+
является литералом+
(плюс). - person MrWhite   schedule 19.01.2020