Редирект адресов с русскими буквами через htaccess

12
М
На сайте с 08.09.2006
Offline
223
9804

Добрый день.

Столкнулся с проблемой, что при 301 редирекете через htaccess, русские буквы в адресе заменяются на коды вида %25D1%2582%25D0%25B5%25D1%2581%25D1%2582 ... а нужно, чтобы русские буквы в новом адресе сохранляись. Можно ли как то, это пофиксить?

То есть получить редирект:

с

sitename.ru/?option=руские_буквы

на

newsitename.ru/?option=русские_буквы

а то сейчас новый адрес получается:

newsitename.ru/?option=%25D1%2580%25D1%2583%25D1%2581%25D1%2581%25D0%25BA%25D0%25B8%25D0%25B5_%25D0%25B1%25D1%2583%25D0%25BA%25D0%25B2%25D1%258B...

Или как с этим бороться?

Спасибо.

Не бойся неизбежного... Уже не продаю авто морды...
iren K
На сайте с 28.12.2008
Offline
222
#1

вам нужно чтобы файл .htaccess был в кодировке UTF-8 без BOM

c уважением Iren
М
На сайте с 08.09.2006
Offline
223
#2
iren K:
вам нужно чтобы файл .htaccess был в кодировке UTF-8 без BOM

Что то непонятное происходит. Открываю htaccess меню кодировку на utf-8 сохраняю, заново открываю его и смотрю кодировка все равно старая стоит.. Прием если файл переименовать в какой то другой, то кодировка сохраняется, а вот в .htaccess нет.. Как такое может быть?

iren K
На сайте с 28.12.2008
Offline
222
#3
Маэстро:
Как такое может быть?

позволю себе пару слов:

htaccess должен быть записан в формате ОС вашего сервера.

Дело в том, что в Windows и DOS перевод строки обозначается двумя спец-символами - "\r\n" (0x0D 0x0A или 13 10), а в UNIX одним - "\n" (0x0A или 10).

Поэтому если на сервере стоит UNIX, то файл, написанный под Windows, работать не будет.

Поэтому его необходимо одно из следующего:

a) открыть в 16-ричном редакторе и запустить замену 0x0D на 0x20 (пробел в 16-ричном варианте).

b) Обработать файл данной функцией (php5):

<?php file_put_contents($filename, strtr(file_get_contents($filename, array("\r\n" => "\n")))); ?>

c) Создавать файл непосредственно на сервере с помощью php-скрипта.

d) Использовать ASCII-режим передачи данных в вашем ftp-клиенте.

e) Настроить ваш php-редактор так, чтоб он сохранял файлы в UNIX-формате.

Это если вы не знали..

IL
На сайте с 20.04.2007
Offline
435
#4
iren K:
Поэтому если на сервере стоит UNIX, то файл, написанный под Windows, работать не будет.

Вообще, от редактора зависит.

Сохранял при помощи notepad++ - всё ОК.

Вот такое, в смысле, работает.. файл в кодировке UTF-8 без BOM

RewriteRule ^страница1.htm /page1.html? [R=301,L]

* p.s. А перенос точно влияет на работу .htaccess?

... :) Облачные серверы от RegRu - промокод 3F85-3D10-806D-7224 ( http://levik.info/regru )
М
На сайте с 08.09.2006
Offline
223
#5

Проверил, кодирока UTF-8 без BOM стоит, но это не решает проблему с редиректом русских букв.

---------- Добавлено 13.03.2013 в 18:13 ----------

Код такой..

RewriteCond %{HTTP_HOST} ^sub\.domain\.com$

RewriteCond %{REQUEST_URI} !^/dir/

RewriteRule ^(.*) /dir/$1 [L]

RewriteCond %{HTTP_HOST} ^www\.domain\.com$

RewriteRule ^dir/(.*) http://sub.domain.ru/$1 [R=301,L]

То есть я не прописываю кокрентно русские страницы.. захватываются все адреса, среди которых есть адреса с русскими буквами.

siv1987
На сайте с 02.04.2009
Offline
427
#6

Попробуйте добавить флаг NE. Кодировка и переводы строк в данном случае не важны.

М
На сайте с 08.09.2006
Offline
223
#7
siv1987:
Попробуйте добавить флаг NE. Кодировка и переводы строк в данном случае не важны.

А куда этот флаг добавить? у меня сразу 500 ошибка вылетает.

Милованов Ю.С
На сайте с 24.01.2008
Offline
196
#8

RewriteRule ^dir/(.*) http://sub.domain.ru/$1 [NE,R=301,L]

Подпись))
М
На сайте с 08.09.2006
Offline
223
#9

Кажется разобрался, огромное спасибо. Но в ходе решения данной проблемы, я задался вопросом. По идеи , как я понял эти шестнадцатиричные симолы нормальноя явление, теже поисковики понимают эти коды и сопостовляют им русские запросы... Отсюда вопрос, посредстмов php как можно преобразовать шестнадцетирчный код в сивольный?

Милованов Ю.С
На сайте с 24.01.2008
Offline
196
#10


echo urldecode($_GET['option']);

Option взят из примера в 1-ом посте.

UPDATE:

совсем забыл.

В $_GET и других сеперглобальных массивах уже декодированные данные храняться.

Код указанный выше - не стоит юзать:)

Так что просто применяйте $_GET['option']

12

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