Форум программистов, компьютерный форум, киберфорум
Наши страницы
Apache, htaccess
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 105, средняя оценка - 4.89
Restel
33 / 34 / 2
Регистрация: 28.04.2010
Сообщений: 571
#1

Русские буквы в .htaccess - Apache, htaccess

16.06.2010, 21:37. Просмотров 14142. Ответов 23
Метки нет (Все метки)

Нужна помощь тех, кто с такой проблемой сталкивался, и у кого получилось.

Мне надо сделать ЧПУ с русскими буквами. Обрабатывать их надо в .htaccess

http://www.cyberforum.ru/apache/thread177164.html
Кто знает, объясните, пожалуйста, все пошагово - в какой кодировке создавать файлы, как передавать ссылки (с помощью функции urlencode() или просто), что потом писать в .htaccess.

Прошу не устраивать холивар.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.06.2010, 21:37
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Русские буквы в .htaccess (Apache, htaccess):

Русские буквы в URL
Несколько дней назад перенес сайт на сервер (CentOS 6.4) с панелью VESTA. ...

.htaccess
Такая проблема в корне сайт написанная такая инструкция RewriteRule...

.htaccess
Здравствуйте. Я формирую ссылку в .htaccess для страницы disease.php ...

.htaccess
Всем привет. У меня такая проблема впервые! Создаю файл .htaccess, а он мне...

.htaccess
глючит переменая value на третим уровне все ок а вот на первом и втором не...

23
Alorian
691 / 531 / 40
Регистрация: 22.06.2009
Сообщений: 1,291
17.06.2010, 13:31 #2
Хм, а в чем собственно разница между русскими и английскими буквами? Если с английскими работало, то и с русскими должно работать. Можно правила для английских букв из .htaccess увидеть? Насколько я знаю mod_rewrite без разницы на каком языке ссылка.

Там проблема по-моему не в .htaccess, а в браузерах. Ни один ИЕ у меня русские буквы в URL отображать не хочет, только если скопировать УРЛ с русскими буквами и вставить в строку браузера. Если в ИЕ просто переходить по гиперссылкам, то русских букв не будет видно.
В пример могу привести википедию. Если главную страницу открыть, и покликать по внутренним ссылкам, то УРЛ всех новых страниц в ИЕ будут выглядеть так:
http://ru.wikipedia.org/wiki/%D0%94%...BD%D0%B8%D0%B5
,но в опере УРЛ новых страниц будут выглядеть так:
http://ru.wikipedia.org/wiki/Добросовестное_использование
0
Restel
33 / 34 / 2
Регистрация: 28.04.2010
Сообщений: 571
17.06.2010, 16:13  [ТС] #3
Alorian, речь не об этом...
Мне не важно, как они будут отображаться в строке браузера. Это фишка не для людей, а для поисковиков. И с английскими буквами проблем никогда не бывает - у них код во всех кодировках один и тот же. Но мне надо этот урл с русскими буквами передавать в .htaccess, чтобы выводилась нужная страница... Я не могу объяснить все это человеку, который с подобным не сталкивался... Сама тоже впервые это делаю.
0
Vovan-VE
13148 / 6531 / 1038
Регистрация: 10.01.2008
Сообщений: 15,071
17.06.2010, 16:41 #4
Можно предусмотреть оба варианта с UTF-8 и c Windowx-1251, чтобы "АБВ" понималось как %C0%C1%C2 и как %D0%90%D0%91%D0%92

А в .htaccess'е в общем и целом как-то так:
Код
RewriteEngine on
RewriteBase /
# разрешить файла в корне c хотя бы одной точкой в имени
# сюда же попадет и index.php
RewriteRule ^[^/]+(\.+[^/]+)+$ - [L]
# разрешить нужные папки в корне
RewriteRule ^(img|css|js)/ - [L]
# все остальные реврайтить в index.php
RewriteRule ^.*$ /index.php [NS]
А потом в index.php
PHP
1
2
3
4
5
$Addr = trim($_SERVER['REQUEST_URI'], '/');
if ($Addr != '') $Addr = explode('/', $Addr);
else $Addr = array();
 
print_r($Addr);
Запрашиваем "/" - видим array()
Запрашиваем "/foo" - видим array('foo')
Запрашиваем "/foo/bar" - видим array('foo', 'bar')

А уже потом можно искать в $Addr русские буквы в обоих кодировках.
1
Restel
33 / 34 / 2
Регистрация: 28.04.2010
Сообщений: 571
17.06.2010, 16:50  [ТС] #5
Цитата Сообщение от Vovan-VE Посмотреть сообщение
Запрашиваем "/" - видим array()
Запрашиваем "/foo" - видим array('foo')
Запрашиваем "/foo/bar" - видим array('foo', 'bar')
Да, но мне надо запрашивать "/ссылка" или "/каталог/ссылка".

Цитата Сообщение от Restel Посмотреть сообщение
Мне надо сделать ЧПУ с русскими буквами.
0
Vovan-VE
13148 / 6531 / 1038
Регистрация: 10.01.2008
Сообщений: 15,071
17.06.2010, 17:39 #6
Цитата Сообщение от Restel Посмотреть сообщение
Мне надо сделать ЧПУ с русскими буквами.
Это я понимаю. Но надо же с чего-то начать.
В том PHP коде надо первую строку исправить на
PHP
1
$Addr = urldecode(trim($_SERVER['REQUEST_URI'], '/'));
И получите уже русские буквы, либо в UTF-8, либо в Windows-1251.
1
Restel
33 / 34 / 2
Регистрация: 28.04.2010
Сообщений: 571
17.06.2010, 17:49  [ТС] #7
Цитата Сообщение от Vovan-VE Посмотреть сообщение
PHP
1
$Addr = urldecode(trim($_SERVER['REQUEST_URI'], '/'));
Я просто не совсем понимаю, зачем это писать в index.php. У меня сам .htaccess не понимает, когда я ему русские буквы шлю... и не перенаправляет меня на нужную страницу.
Аа, это наверно, когда уже буду разбирать урл, на который меня перенаправляет... так его я буду английскими посылать...

Добавлено через 2 минуты
Цитата Сообщение от Vovan-VE Посмотреть сообщение
# все остальные реврайтить в index.php RewriteRule ^.*$ /index.php [NS]
зачем?
0
Vovan-VE
13148 / 6531 / 1038
Регистрация: 10.01.2008
Сообщений: 15,071
17.06.2010, 18:22 #8
Цитата Сообщение от Restel Посмотреть сообщение
зачем?
Что значит "зачем" О_о? Вы же хотите ЧПУ сделать. Благодаря mod_rewrite "все" запросы будет обрабатывать один cкрипт, и он будет знать, что изначально запросил юзер.
1
Restel
33 / 34 / 2
Регистрация: 28.04.2010
Сообщений: 571
17.06.2010, 18:36  [ТС] #9
Vovan-VE, а можно еще подробнее?)) Как он в итоге поймет русские буквы?
Я дико извиняюсь, конечно, но я пока ничего не поняла...

Вот делаю я ссылку типа "/link", в файлике пишу RewriteRule ^link(/?) /another_link [L] - все нормально.
Пишу ссылку типа "/%6C%69%%6E%6B" - тоже понимает.
Делаю то же самое с русскими буквами - не понимает...
0
Vovan-VE
13148 / 6531 / 1038
Регистрация: 10.01.2008
Сообщений: 15,071
17.06.2010, 18:40 #10
Цитата Сообщение от Restel Посмотреть сообщение
Делаю то же самое с русскими буквами - не понимает...
Потому что русские буквы как таковые не передаются. Они всегда передаются в закодированном виде%C0%C1.
Цитата Сообщение от Restel Посмотреть сообщение
Вот делаю я ссылку типа "/link", в файлике пишу RewriteRule ^link(/?) /another_link [L] - все нормально.
Так Вы будете делать для каждого link? И сколько их всего? Сегодня 10, завтра 1000. Если у Вас динамические адреса (CMS в частности), то перенаправляйте сразу все:
Код
RewriteRule ^.*$ /index.php [NS]
А в случае константного набора адресов используйте:
Цитата Сообщение от Restel Посмотреть сообщение
Пишу ссылку типа "/%6C%69%%6E%6B" - тоже понимает.
1
Restel
33 / 34 / 2
Регистрация: 28.04.2010
Сообщений: 571
17.06.2010, 18:44  [ТС] #11
Vovan-VE, ну вообще ссылок будет очень много, и мне сказали, что придется для каждой прописывать. Для каждой страницы ее русская ссылка прописывается в БД...
0
Vovan-VE
13148 / 6531 / 1038
Регистрация: 10.01.2008
Сообщений: 15,071
17.06.2010, 18:45 #12
Цитата Сообщение от Restel Посмотреть сообщение
мне сказали, что придется для каждой прописывать
Бред Вам сказали, убейте их
0
Restel
33 / 34 / 2
Регистрация: 28.04.2010
Сообщений: 571
17.06.2010, 18:50  [ТС] #13
Опишу все же ситуацию целиком...
Я делаю новостной сайт на php. Статьи хранятся в БД. Адрес каждой статьи в строке браузера должен выглядеть как http://www.site.ru/название_статьи
Вот нажимаю я на эту ссылку, из файла .htaccess получаю уже нормальную ссылку с параметрами, и вывожу нужную статью.
Вот как все это сделать?
0
Vovan-VE
13148 / 6531 / 1038
Регистрация: 10.01.2008
Сообщений: 15,071
17.06.2010, 19:24 #14
Пишите в .htaccess
Код
RewriteEngine on
RewriteBase /

# если запросили не папку и не файл, то
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/?$ /script.php?$1 [NS]
В script.php для теста напишите следующее:
PHP
1
2
3
4
<?php
header('Content-Type: text/plain; charset=utf-8');
print_r($_SERVER);
?>
Сейчас пробовал "/абв", работает. Среди переменных в $_SERVER есть то, что нужно.
2
Restel
33 / 34 / 2
Регистрация: 28.04.2010
Сообщений: 571
17.06.2010, 19:41  [ТС] #15
Ой, туплю!!! Получилось! Гениально!
0
Alorian
691 / 531 / 40
Регистрация: 22.06.2009
Сообщений: 1,291
18.06.2010, 10:34 #16
Я честно говоря думал что у вас сделано примерно так как предложил Vovan-VE, то есть один скрипт отображает разный контент в зависимости от GET переменных. Поэтому и удивился почему если значения GET перемененных на английском нормально обрабатываются, то на русском они перестают работать.
В .htaccess русские и английские УРЛ парсятся одинаково, если само регулярное выражение написано нормально.

Vovan-VE, такое правило вы в качестве _примера_ привели?
Код
RewriteRule ^([^/]+)/?$ /script.php?$1 [NS]
Просто переменная $1 будет на русском языке и без значения, так что использовать ее в php не получится. Все равно придется парсить URL внутри php еще раз. Или я чего то не понимаю?

Я думаю лучше написать так:
Код
RewriteRule . /script.php [NS,QSA]
URL внутри php тоже нужно будет парсить, но лишних обработок в .htaccess не делается. Кроме того так будет работать если в урле есть папки.

Если парсить URL внутри htaccess, то я думаю стоит передавать распарсенные значения как get переменные, примерно так:
Код
RewriteRule ^([^/]+)/?([^/]*)/?$ /script.php?level1=$1&level2=$2 [NS,QSA]
0
Vovan-VE
13148 / 6531 / 1038
Регистрация: 10.01.2008
Сообщений: 15,071
18.06.2010, 16:24 #17
Цитата Сообщение от Alorian Посмотреть сообщение
Vovan-VE, такое правило вы в качестве _примера_ привели?
Код
RewriteRule ^([^/]+)/?$ /script.php?$1 [NS]
Просто переменная $1 будет на русском языке и без значения, так что использовать ее в php не получится. Все равно придется парсить URL внутри php еще раз. Или я чего то не понимаю?
Конкретно в этой задаче нужно было "/название_статьи" безо всяких дополнительных слешей и путей. Изначально-то я предлагал всегда полностью весь урл парсить:
Код
RewriteRule ^.*$ index.php
Т.е. разбивать по слешам на папки, и дело с концом.

А вообще при использовании mod_rewrite все очень сильно зависит от сервера. Сам сталкивался со случаями, когда после похожего реврайта, как выше, сервер не дает скрипту инфу о том, какой урл был запрошен изначально (а должен!), а дает только полученный после реврайта урл. Вот тогда приходится извратом заниматься.
0
CIIayHeHoK
0 / 0 / 0
Регистрация: 19.11.2010
Сообщений: 3
19.11.2010, 15:35 #18
Товарисчи есть у меня рускоязычный домен с расширением .рф.
хочу поставить рускоязычные страницы без расширения.
Подскажите пожалста как это возможно сделать. Заранее спасибо.
0
lesli007
0 / 0 / 0
Регистрация: 21.03.2011
Сообщений: 2
24.03.2011, 21:15 #19
Vovan-VE, скажите пожалуйста, как именно скажем страницу ляля.рф/index.php заменить на ляля.рф/главная ? Немножко не хватает мне до осмысления

Напишите пожалуйста польностью ответ, а то никак не могу сопоставить сообщения по теме

Добавлено через 1 час 32 минуты
есть несколько файлов. напишу точнее - хочу что название отображалось такие название для след страниц:
index.php сайт.рф/о_компании
kontaktu.php сайт.рф/контакты
и тд.

есть файл view_proekt.php?id=1 , где ловлю идентификаторы и вывожу фотки проектов. его бы тоже как нибудь сайт.рф/наши проекты
0
Dysha
0 / 0 / 0
Регистрация: 03.06.2017
12.05.2011, 08:41 #20
Доброго времени суток, уважаемые программисты!

Подскажите мне, пожалуйста, такое:
У меня есть движок, страницы у которого хранятся в папке articles. Мне нужно сделать так, чтобы страницы выводились на русском языке:
Например, о_компании.html | /о компании/ | о_компании/директор/

По вашим советам, описанным выше, ничего не выходит...

Скажите как быть...

P.S. Сборка движка под кодировку utf-8. Кому нужно, могу выслать исходные файлы: .htaccess, index.php, functions.php.

Спасибо за внимание!
0
12.05.2011, 08:41
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.05.2011, 08:41
Привет! Вот еще темы с решениями:

.htaccess
Доброго времени суток... На сайте есть некий каталог &quot;files&quot; в котором хранятся...

.htaccess
Вот такое настройки в .htaccess RewriteBase / AddDefaultCharset UTF-8...

CI .htaccess
Не подгружается вьюшка, в фаербаге:network-&gt;upload get mothod 404 not Found....

.htaccess
Добрый вечер стоит 2 задачи которые на знаю как реализовать. 1)...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru