Кодированный URL в перенаправлении htaccess 301 (mod_rewrite) - PullRequest
1 голос
/ 24 января 2020

Я теряюсь после того, как копаюсь в этом деле в течение многих дней. У нас есть следующие перенаправления:

RewriteRule ^something/something2/?$ http://test.com/blabla?key=blablabla1287963%3D [R=301,L,E=OUTLINK:1]
Header always set X-Robots-Tag "noindex" env=OUTLINK

К сожалению,% 3D был удален модулем (mod_rewrite). Основная проблема в том, что я знаю, как это исправить вручную, но у меня есть несколько похожих перенаправлений, и мне нужно «глобальное решение». Обратите внимание, что возврат к перенаправлению 301 (у меня не было проблем с перенаправлением 301 и закодированными URL / символами) не возможен, поскольку я хочу использовать noindex ... Спасибо!

1 Ответ

1 голос
/ 24 января 2020

, что %3D было удалено модулем

Я думаю, вы обнаружите, что это %3, который удаляется, а не %3D. %3 рассматривается как обратная ссылка на предыдущее условие, которое, как я подозреваю, не существует, поэтому заменяется пустой строкой в ​​подстановке . (Это не было бы проблемой для Redirect, поскольку %N обратные ссылки не являются чем-то особенным для mod_alias.)

Вам необходимо backsla sh экранировать %, чтобы представить литерал % в строке подстановки , чтобы отрицать ее особое значение в этом случае.

Затем вам понадобится флаг NE на RewriteRule, чтобы запретить саму % будучи закодированным URL-адресом (как %25) в ответе (по существу, кодирование значения параметра URL-адреса вдвойне).

Например:

RewriteRule ^foo$ http://test.com/blabla?key=blablabla1287961\%3D [NE,R=302,L,E=OUTLINK:1]

У меня есть несколько похожих перенаправлений, и я нужно «глобальное решение»

Что касается «глобального решения», то на сервере нет переключателя magi c, который можно было бы «исправить». Вам нужно изменить каждую директиву, где возникает этот конфликт .

...