+, %2B, %20, пробел - к одному знаменателю в .htaccess.

12
MK
На сайте с 28.05.2008
Offline
74
6925

Здравствуйте.

По историческим причинам некоторые страницы открываются и имеют ссылки вида:

site/link/part1[XXX]part2/, где [XXX] может быть в разных вариантах: %2B, %20, +, пробел.

Как заменить эти все символы на + (или что-нить другое одинаковое) в .htaccess?

Мучаюсь, читаю, догнать не могу - как-то необычно apache это всё обрабатывает.

bon_eur
На сайте с 09.06.2012
Offline
40
#1
MasKarAl:
Как заменить эти все символы на + (или что-нить другое одинаковое) в .htaccess?

Заменить где, в выдаче ПС? То есть сделать редирект со старых на новые и rewrite с новых на старые?

MK
На сайте с 28.05.2008
Offline
74
#2
bon_eur:
Заменить где, в выдаче ПС? То есть сделать редирект со старых на новые и rewrite с новых на старые?

В выдаче пофигу - само со временем исправится. И как лучше кстати для выдачи (+ или пробел или что-то другое)?

Вопрос в том, как регулярку написать в .htaccess для 301 редиректа?

Для приведения к единому стилю.

bon_eur
На сайте с 09.06.2012
Offline
40
#3
MasKarAl:
И как лучше кстати для выдачи (+ или пробел или что-то другое)?

Практически все равно, но я бы разделителем ставил - или _, если я правильно понял ваш замысел.

Вопрос в том, как регулярку написать в .htaccess для 301 редиректа?

Написать регулярное предложение - это понятно. Но если сделать редирект на новые адреса, то почему вебсервер станет отвечать по этим адресам? Видимо, надо также делать rewrite с новых на старые, о чем я и написал.

Давайте поточнее расскажите.

MK
На сайте с 28.05.2008
Offline
74
#4
bon_eur:
Практически все равно, но я бы разделителем ставил - или _, если я правильно понял ваш замысел.

Написать регулярное предложение - это понятно. Но если сделать редирект на новые адреса, то почему вебсервер станет отвечать по этим адресам? Видимо, надо также делать rewrite с новых на старые, о чем я и написал.

Давайте поточнее расскажите.

Приведу пример. Допустим это поисковая строка вида site/search/query/

query может включать эти символы, передаётся в php и там уже обрабатывается должным образом.

php непосредственно заменяет всё что в заголовке темы на пробел и обращается в БД, для php всё равно какой из этих символов использован.

Для php новые=старые (в смысле на входе в url-е проходят автозамены), они (url-ы) все одинаковые. Поэтому:

bon_eur:
Вебсервер станет отвечать по этим адресам?

Станет.

Символы - или _ нельзя - используются для других целей в url-е. Лучше +.

bon_eur
На сайте с 09.06.2012
Offline
40
#5
MasKarAl:
Символы - или _ нельзя - используются для других целей в url-е. Лучше +.

Пробелы на плюсы можно вот так редиректить:

RewriteRule search/(.*)\ (.*)/ search/$1+$2/ [R=301,L]

Но броузер, по идее, будет менять плюсы на %2B при запросе.

---------- Добавлено 23.06.2012 в 04:44 ----------

bon_eur:
Но броузер, по идее, будет менять плюсы на %2B при запросе.

Сейчас проверил на ФФ - он плюсы оставляет.

MK
На сайте с 28.05.2008
Offline
74
#6
bon_eur:
Пробелы на плюсы можно вот так редиректить:
RewriteRule search/(.*)\ (.*)/ search/$1+$2/ [R=301,L]


Но броузер, по идее, будет менять плюсы на %2B при запросе.

Сейчас проверил на ФФ - он плюсы оставляет.

Про пробел понятно, попробуем. Да, FF и хром оставляют (про остальных не знаю).

Проблема остаётся.

При %2B и + REQUEST_URI приходит разный, но нужен одинаковый, используется как ключ.

bon_eur
На сайте с 09.06.2012
Offline
40
#7

Сурово получается.

Попробуйте:

RewriteCond %{THE_REQUEST} ^(GET|HEAD)\ /(search/.*)(\%2B|\%20|\ )(.*/)\ HTTP [NC]

RewriteRule . %2+%4 [NE,R=301,L]
MK
На сайте с 28.05.2008
Offline
74
#8
bon_eur:
Сурово получается.

Попробуйте:
RewriteCond %{THE_REQUEST} ^(GET|HEAD)\ /(search/.*)(\%2B|\%20|\ )(.*/)\ HTTP [NC]

RewriteRule . %2+%4 [NE,R=301,L]

Спасибо, но не работает.

%2B меняет на B

c пробелом браузер вообще в гугл-поиск отправляет почему то (ФФ)

с + между доменом и /search вставляется document_root (или что-то похожее)

В общем, кто в лес - кто по дрова.

bon_eur
На сайте с 09.06.2012
Offline
40
#9

У меня этот код работает четко. Может, другие правила влияют?

---------- Добавлено 23.06.2012 в 16:28 ----------

MasKarAl:
%2B меняет на B

Вы точно код скопировали, скобочки там всякие?... Дело в том, что этот код не может выдавать "B".

MK
На сайте с 28.05.2008
Offline
74
#10
bon_eur:
У меня этот код работает четко. Может, другие правила влияют?

---------- Добавлено 23.06.2012 в 16:28 ----------


Вы точно код скопировали, скобочки там всякие?... Дело в том, что этот код не может выдавать "B".

Спасибо, работает в Chrome и Opere, а Firefox всё делает по-своему. В IE не могу пока что проверить.

Интересно, если даже браузеры по-своему обрабатывают, что же будет с ПС ?

p.s.: извините, что долго не отвечал

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий