|
|
|
| в htaccess есть строка
RewriteRule ^o-нас$ index.php [L,QSA]
|
Файлы в кодировке utf-8, ссылка нормально отображается русскими буквами, но при переходе эта ссылка превращается в "/%D0%BE-%D0%BD%D0%B0%D1%81?" и выдает 404 ошибку. С латиницей(o-nas) все нормально работает. Не подскажите как можно исправить проблему? | |
|
|
|
|
|
|
|
для: ladan
(15.02.2012 в 15:55)
| | Нужно подставлять шестнадцатиричные коды символов, а не кирилицу. Кирилицы в хтакцесс быть не должно. Т.е. берете ваше "%D0%BE-%D0%BD%D0%B0%D1%81" и заменяете каждый % на \x. Получаете правило:
RewriteRule ^\xD0\xBE-\xD0\xBD\xD0\xB0\xD1\x81$ index.php [L,QSA]
|
| |
|
|
|
|
|
|
|
для: Sfinks
(15.02.2012 в 17:36)
| | да, действительно все работает :) Спасибо!
Весь сайт в utf-8 переделал, теперь из базы вытаскивается не текст, а одни вопросики в черном квадрате. Если новую инфу вставлять в бд, то нормально показывает русский текст, а старый с вопросиками. почему так??
----
помогло
mysql_query('SET character_set_database = utf8');
mysql_query('SET NAMES utf8'); | |
|
|
|
|
|
|
|
для: ladan
(15.02.2012 в 18:23)
| | а как лучше сделать... сейчас в htaccess такая запись
RewriteRule ^\xD0\xBE-\xD0\xBF\xD1\x80\xD0\xBE\xD0\xB5\xD0\xBA\xD1\x82\xD0\xB5$ index.php?id=2 [L,QSA]
|
Приходится дополнительно делать проверку mysql_real_escape_string($_GET['id']) от возможных инъекций, но можно и так записывать
RewriteRule ^\xD0\xBE-\xD0\xBF\xD1\x80\xD0\xBE\xD0\xB5\xD0\xBA\xD1\x82\xD0\xB5$ index.php [L,QSA]
|
И при этом в бд табличку создать, где будут все чпу ссылки и их реальный адресс с параметрами.
И потом просто вырезать эти параметры для mysql запроса из этого реального адреса. И тут получается что вообще не нужно никакой защиты делать. Даже если неправильно будет введена ссылка, то возникнет 404 ошибка.. Хорошая ли это защита от sql атак? :) | |
|
|
|
|
|
|
|
для: ladan
(15.02.2012 в 19:05)
| | Перефразирую ваш вопрос:
- Что лучше проверить, if(!is_numeric($_GET["id"])) exit; Или Создать таблицу, пропарсить REQUEST_URI, подключиться к БД, проверить допустим ли такой адрес и если допустим, выбрать из строки запроса нужный фрагмент, сделать еще один запрос к БД и выбрать параметр который соответствует этому запросу?
Или еще по другому:
- Что лучше, проверить на КПП документы или проверить есть ли в картотеке похожая фотография, если есть, то проверить трезвость, отпечатки пальцев, сетчатку, анализ на вич.... Если ОК, выдать документы и пропустить?
=) | |
|
|
|
|
|
|
|
для: Sfinks
(15.02.2012 в 19:16)
| | )))) понял | |
|
|
|
|
|
|
|
для: ladan
(15.02.2012 в 19:47)
| | а вот такая проблемка.
ЧПУ "отдых-в-Анапе/1"
и регулярка в htaccess
RewriteRule ^.+\/?([0-9]+)$ index.php?id=$1 [L,QSA]
|
не работает...Если слеш убирать(отдых-в-Анапе-1), то нормально работает.. Не подскажите как можно делать ссылки такого типа "категория/параметр/параметр"
и еще вопрос. Как можно разделить такую запись в htaccess
RewriteRule ^.+\/?([0-9]+)$ index.php?id=$1 [L,QSA]
RewriteRule ^(.+)-(.+)$ view_cat.php?zone=$1&category=$2 [L,QSA]
|
Я так понимаю, нужно разные условия(RewriteCond) перед RewriteRule прописывать, чтоб работало.. А какие условия я хз, с htaccess познакомился на днях :) | |
|
|
|
|
|
|
|
для: ladan
(15.02.2012 в 20:14)
| | вроде разобрался. Не работало так как регулярка там и там совпадала.
Переделал, пока работает все работает :)
RewriteRule ^.+-?.+-?([0-9]+)$ index.php?id=$1 [L,QSA] #отдых-в-Анапе-1
RewriteRule ^(.+)\+(.+)$ view_cat.php?zone=$1&category=$2 [L,QSA] #Анапа+отели
|
все еще интересует вопрос
а вот такая проблемка.
ЧПУ "отдых-в-Анапе/1"
|
Спасибо!!! | |
|
|
|
|
|
|
|
для: ladan
(15.02.2012 в 21:22)
| | вы злоупотребляете конструкциями .+
Так очень скоро комбинации кончатся.
Да и щас уже под ^.+-?.+-?([0-9]+)$ подойдет любой урл из 2ух любых знаков и цифры. Даже http://site.ru///0
Структурируйте как-нибудь какие у вас могут быть ссылки и разделите жоще по каким-нибудь ключевым словам. Нипример не
^(.+)\+(.+)$ view_cat.php?zone=$1&category=$2 [L,QSA] #Анапа+отели
а
отели/([\x7f-\xff]{3,})/ view_cat.php?zone=отели&category=$1
Причем лучше ссылки завершать слешем. ИМХО
___
Да, и в zone=отели, т.е. в строке гет-параметров коды кирилицы возможно нужно писать через %. Пробуйте, проверяйте. Я этого не делал. А так как юзер этого всерн не увидит, лучше так:
отели/([\x7f-\xff]{3,})/ view_cat.php?zone=hotels&category=$1 | |
|
|
|
|
 188.2 Кб |
|
|
для: Sfinks
(15.02.2012 в 23:23)
| | у меня по мимо отелей, еще гостиницы, квартиры и тп куча всего :)
Можно прописать 15 RewriteRule для каждой категории, но не хочу так делать... когда можно 1 раз написать. Выход нашел- в htaccess сначала записывать самые "тяжелые" регулярки, а потом уже ниже к общим спускаться и недоразумений не будет :) А со слешами в ЧПУ у меня проблема((
Вот ЧПУ "письмо-администратору/" со слешем
Регулярка под него
RewriteRule ^\xD0\xBF\xD0\xB8\xD1\x81\xD1\x8C\xD0\xBC\xD0\xBE-\xD0\xB0\xD0\xB4\xD0\xBC\xD0\xB8\xD0\xBD\xD0\xB8\xD1\x81\xD1\x82\xD1\x80\xD0\xB0\xD1\x82\xD0\xBE\xD1\x80\xD1\x83/$ message-to-admin.php [L,QSA]
| Без слешов все работает.
Так и не понимаю почему так происходит... от слешов весь каркас сайта рушится, будто таблица стилей отключается. Скрин приложил, может у вас тоже так было.. | |
|
|
|
|
|
|
|
для: ladan
(16.02.2012 в 00:37)
| | > Выход нашел- в htaccess сначала записывать самые "тяжелые" регулярки,
> а потом уже ниже к общим спускаться и недоразумений не будет
Еще как будут! MR работает так (простейший случай без RewriteCond): берется запрошенный урл, подставляется в 1ое правило, если подошло, заменяется на то, что указано в правиле, затем берется то что получилось и подставляется во второе правило, если совпало - заменяет и т.д. и т.п. до самого последнего правила. При чем указатель [L], который должен прерывать эту цепочку, нифига не срабатывает. Вроде как должен, ан нет. А поэтому очень велика вероятность того, что вы напишите такое общее правило, под которое потом все что угодно подойдет.
> от слешов весь каркас сайта рушится
А у вас как ссылка на CSS в HTML указана? если просто <link rel="stylesheet" href="style.css" type="text/css" />, то это естественно. Браузер же начинает думать что он в папке "письмо-администратору" и в ней же и ищет файл. нужно указывать либо абсолютный путь через http:// либо хотя б от корня: <link rel="stylesheet" href="/style.css" type="text/css" />. Тоже самое касайтся и картинок и прочих встроенных элементов. Либо можно еще указать в шапке страницы тег <base>
> гостиницы, квартиры и тп куча всего
Можно не писать на каждый похожий вариант по правилу, а объеденить:
RewriteRule ^(type1|type2|type3)/(что-то еще)/ redir.php?cat=$1&dir=$2
В общем-то дело ваше. Мое дело посоветовать не наступать на мои грабли. Хотите сами на свои наступить - дело ваше. Просто помните что отладчиков для MR не существует, а лог такой, что без него лучше. | |
|
|
|
|
|
|
|
для: Sfinks
(16.02.2012 в 03:07)
| | Спасибо, попробую таблицу стилей через абсолютный путь подключить и этот вариант RewriteRule ^(type1|type2|type3)/(что-то еще)/ redir.php?cat=$1&dir=$2 понравился. Буду тогда им пользоваться :) | |
|
|
|