Перенаправить часть строки с помощью mod_rewrite - PullRequest
1 голос
/ 06 февраля 2011

Мне нужно правило в моем файле .htacess, чтобы заменить его подчеркиванием и 301 перенаправить любую часть строки запроса, которая содержит символ пробела (% 20) или двойной пробел (% 2520).

Например, если строка запроса содержит следующий параметр

weight=really%2520really%20heavy

Параметр необходимо изменить в URL-адресе и перенаправить на:

weight=really_really_heavy

Мне нужно это как временная мера;к сожалению, у меня нет доступа к PHP-скрипту, который генерирует эти параметры, но я жду, когда они будут изменены.

Я был бы благодарен за правило, которое я могу поместить в мой .htacess для этого.1011 *

Ответы [ 2 ]

2 голосов
/ 06 февраля 2011
RewriteRule ^(.*)\ (.*)$ $1_$2 [N]

должен это сделать (подгоняя параметры в скобках под то, что вам подходит);он заменяет первый пробел подчеркиванием, а затем повторяет правило, пока оно больше не совпадает.Обратите внимание, что обратная косая черта может не работать;в этом случае я не знаю, как это сделать, поскольку сопоставление пробелов в URL в mod_rewrite иногда бывает очень привередливым.

1 голос
/ 06 февраля 2011

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

RewriteEngine On
RewriteBase /path/to/this/directory
RewriteCond %{QUERY_STRING} ^(.*)(%20|%2520)(.*)$
RewriteRule ^(.+)$ $1?%1_%3 [N,R=301]

Объяснение: Чтобы редирект 301 работал, вам нужно установить RewriteBase в каталог, содержащий файл .htaccess (как видно из веб-браузера относительно DocumentRoot).

Вы должны установить RewriteCond, чтобы соответствовать строке запроса, и выбрать шаблон для соответствия.

В шаблоне замены в последней строке $ 1 является обратной ссылкой на шаблон RewriteRule, а% 1,% 3 - обратные ссылки на шаблон RewriteCond.

...