Вернуться   Форум SAPE.RU > Общие вопросы > Разработка и сопровождение сайтов

-->
Ответ
 
Опции темы
Старый 14.09.2009, 16:04   #41
Новичок
 
Аватар для Manfred
 
Регистрация: 08.05.2009
Сообщений: 30
Вес репутации: 183
Manfred на пути к лучшему
По умолчанию

Цитата:
Сообщение от seocore Посмотреть сообщение
я это к тому, что если на сайте есть:
/razdel/stranica/

то не надо пытаться делать какие-то бессмысленные вещи как:
/razdel/stranica
/razdel/stranica/index.html

надо просто отрабатывать то ЧПУ, которое выбрано, при этом неплохо сохранять полученный результат в массив, и отсеивать все левые срабатывания (в т.ч. потенциальные XSS) в 404 ошибку...

в качестве примера рекомендую глянуть WordPress
Интересно рассказываете..
У меня примерно так: (файл обработчик):

получаем урлу $url=$_GET['url']; например она содержит /folder/folde2/page1/

далее вытягиваем page1 регуляркой if(preg_match('/([a-z0-9,._-]+)\/?$/si', $url, $url)) {$url = $url[1];} else $url = null;

вытянули и $url теперь = 'page1'
далее ищем в базе где он есть и инклюдим реальный файл..

Вот такая у меня структура. Есть свои минусы, но дорабатываю.

Как ясно, если я введу url = /folder/folde2/page1/index.html - ничего не сработает, т.к. регулярка выцепит только index.html. Поэтому можно прописать ещё одну функцию которая выцепит /page1/ без index.htm. Но тогда начинается другая история... блин..:

/folder/folde2/page1/index.html я набираю это сроку и выдаётся 404. Почему? Потому что скорее всего идёт запрос на реальный файл!
Вот сейчас решаю эту проблему. Как сделать чтобы индексный файлы и последний бэкслеши иметировались?

Вы рекомендуете глянуть WordPress.. Вообще раньше никогда его не юзал - сам как-то пишу. Но всё же если вас не затруднит, выложите пожалуйста цепочку ЧПУ как у них он устроен с кодами php и htaccess.. Вы знаете эту систему - вам минуты три выложить..
Manfred вне форума   Ответить с цитированием
Старый 14.09.2009, 16:15   #42
Мне повезёт!
 
Аватар для Alexey
 
Регистрация: 05.05.2007
Сообщений: 1,076
Вес репутации: 276
Alexey - прекрасное будущееAlexey - прекрасное будущееAlexey - прекрасное будущееAlexey - прекрасное будущееAlexey - прекрасное будущееAlexey - прекрасное будущееAlexey - прекрасное будущееAlexey - прекрасное будущееAlexey - прекрасное будущееAlexey - прекрасное будущееAlexey - прекрасное будущее
По умолчанию

Manfred, тогда у вас на сайте
/folder/folde2/page1/
/folder/page1/
/folder/yaaaaa/page1/
/lo-lo-lo-lo/page1/
/girls/page1/

Будут синонимами. Что ошибка.
__________________
Everything will be great in the end.
If it's not great, it's not the end.
Alexey вне форума   Ответить с цитированием
Старый 14.09.2009, 16:23   #43
Специалист
 
Регистрация: 18.05.2009
Сообщений: 176
Вес репутации: 188
Zergalius - как роза среди колючекZergalius - как роза среди колючекZergalius - как роза среди колючекZergalius - как роза среди колючек
Отправить сообщение для Zergalius с помощью ICQ
По умолчанию

Цитата:
Почему? Потому что скорее всего идёт запрос на реальный файл!
Вот сейчас решаю эту проблему. Как сделать чтобы индексный файлы и последний бэкслеши иметировались?
Удалите их. Простой пример:
PHP код:
$url_page ereg_replace ("/$"""$url_page);
$url_page ereg_replace ("/index\.html$"""$url_page);
$url_page ereg_replace ("/index\.html$"""$url_page); 
Zergalius вне форума   Ответить с цитированием
Старый 14.09.2009, 16:58   #44
Специалист
 
Аватар для rsxrby
 
Регистрация: 09.07.2009
Сообщений: 113
Вес репутации: 0
rsxrby не любят в этих краях
По умолчанию

Цитата:
Сообщение от seocore Посмотреть сообщение
вот это вы называете ЧПУ?
http://drupal.org/project/issues/sea...atus[2]=14
http://drupal.org/node/576122
http://drupal.org/node?page=124

помоему WordPress горазда более продуманная вещь в плане ЧПУ
Нет, я имел ввиду, вот это
http://raion-brateevo.ru/novosti/vod...travu-za-rulem
Модуль Pathauto для друпала.
rsxrby вне форума   Ответить с цитированием
Старый 15.09.2009, 12:51   #45
Новичок
 
Аватар для Manfred
 
Регистрация: 08.05.2009
Сообщений: 30
Вес репутации: 183
Manfred на пути к лучшему
По умолчанию

Цитата:
Сообщение от Alexey Посмотреть сообщение
Manfred, тогда у вас на сайте
/folder/folde2/page1/
/folder/page1/
/folder/yaaaaa/page1/
/lo-lo-lo-lo/page1/
/girls/page1/

Будут синонимами. Что ошибка.
знаю. но синонимов не будет. а если будет, выдеру предыдущий паттерн и его обработаю.

Добавлено через 1 час 14 минут
Цитата:
Сообщение от Zergalius Посмотреть сообщение
Удалите их. Простой пример:
PHP код:
$url_page ereg_replace ("/$"""$url_page);
$url_page ereg_replace ("/index\.html$"""$url_page);
$url_page ereg_replace ("/index\.html$"""$url_page); 
Спасибо, всё предельно ясно. А как сделать чтобы (как у Лебедева) если набираем /folder/folder1 последний бэкслеш ставился автоматически? т.е. если набираем /folder/folder1 он редиректит на /folder/folder1/
или если /folder/folder1/index.htm он редиректит на /folder/folder1/index.html ???

Какими средствами это можно реализовать? Ясно что не редиректом на js

Последний раз редактировалось Manfred; 15.09.2009 в 12:51. Причина: Добавлено сообщение
Manfred вне форума   Ответить с цитированием
Старый 15.09.2009, 15:09   #46
Специалист
 
Регистрация: 25.06.2009
Адрес: Красноярск
Сообщений: 443
Вес репутации: 201
BIOHAZARD - за этого человека можно гордитсяBIOHAZARD - за этого человека можно гордитсяBIOHAZARD - за этого человека можно гордитсяBIOHAZARD - за этого человека можно гордитсяBIOHAZARD - за этого человека можно гордитсяBIOHAZARD - за этого человека можно гордитсяBIOHAZARD - за этого человека можно гордитсяBIOHAZARD - за этого человека можно гордитсяBIOHAZARD - за этого человека можно гордится
Отправить сообщение для BIOHAZARD с помощью ICQ
По умолчанию

Цитата:
Сообщение от Manfred Посмотреть сообщение
Какими средствами это можно реализовать?
ModRewrite в .htaccess
__________________
Решил стать бессмертным. Пока получается.
Не получается воткнуть код на сайт? Могу помочь. ася: 858-368. Рефералам бесплатно
BIOHAZARD вне форума   Ответить с цитированием
Старый 15.09.2009, 15:54   #47
Новичок
 
Аватар для Manfred
 
Регистрация: 08.05.2009
Сообщений: 30
Вес репутации: 183
Manfred на пути к лучшему
По умолчанию

Цитата:
Сообщение от BIOHAZARD Посмотреть сообщение
ModRewrite в .htaccess
Пример можно?

У меня так:

RewriteRule ^([0-9a-zA-Z_./-]+)$ main/forsef.php?url=$1

Посоветуйте пожалуйста что дописать
Manfred вне форума   Ответить с цитированием
Старый 15.09.2009, 18:14   #48
Специалист
 
Регистрация: 25.06.2009
Адрес: Красноярск
Сообщений: 443
Вес репутации: 201
BIOHAZARD - за этого человека можно гордитсяBIOHAZARD - за этого человека можно гордитсяBIOHAZARD - за этого человека можно гордитсяBIOHAZARD - за этого человека можно гордитсяBIOHAZARD - за этого человека можно гордитсяBIOHAZARD - за этого человека можно гордитсяBIOHAZARD - за этого человека можно гордитсяBIOHAZARD - за этого человека можно гордитсяBIOHAZARD - за этого человека можно гордится
Отправить сообщение для BIOHAZARD с помощью ICQ
По умолчанию

RewriteRule ^(патерн папки без слэша)$ $1/ [R]
RewriteRule ^(.+)\.htm$ $1.html [R]
RewriteRule ^([0-9a-zA-Z_./-]+)$ main/forsef.php?url=$1

патерн папки придумывайте сами исходя из структуры фиктивных адресов
__________________
Решил стать бессмертным. Пока получается.
Не получается воткнуть код на сайт? Могу помочь. ася: 858-368. Рефералам бесплатно
BIOHAZARD вне форума   Ответить с цитированием
Старый 15.09.2009, 20:00   #49
Специалист
 
Регистрация: 03.09.2009
Сообщений: 270
Вес репутации: 0
miro не любят в этих краях
По умолчанию

Я так делаю.

htaccess:
Код:
RewriteEngine On
Options +FollowSymlinks
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f # если не файл
RewriteCond %{REQUEST_FILENAME} !-d # не директория
RewriteCond %{REQUEST_URI} !\.(js|ico|gif|jpg|jpeg|png|css|cur|php|phtml|doc|xls|txt)$ [NC] # не один из файлов с перечисленным расширением
RewriteRule (.*) index.php?_path=/$1&%{QUERY_STRING} [L] # отдаем запрос в index.php
В index.php всё происходит на уровне сопоставления REQUEST_URI с заданными заранее паттернами в формате регулярных выражений:

PHP код:
$application = new application();

// Урлы админ-интерфейса
$application->addUrlAlias( new Url_Alias_Admin('~^/admin/?$~''index''main') );
$application->addUrlAlias( new Url_Alias_Admin('~^/admin/index/?$~''index''main') );
$application->addUrlAlias( new Url_Alias_Admin('~^/admin/index/main/?$~''index''main') );
$application->addUrlAlias( new Url_Alias_Admin('~^/admin/index/into/?$~''index''into') );

// личный кабинет
$application->addUrlAlias( new Url_Alias('~^/(my)/?$~''my''main') );
// моё инфо в личном кабинете
$application->addUrlAlias( new Url_Alias('~^/(my)/(info)/?$~''my''info') );
// мои фото в кличном кабинете
$application->addUrlAlias( new Url_Alias('~^/(my)/(photo)/?$~''my''photo') );

// логин в систему
$application->addUrlAlias( new Url_Alias('~^/(my)/(login)/?$~''my''login') );
// логаут из системы
$application->addUrlAlias( new Url_Alias('~^/(my)/(logout)/?$~''my') );

// просмотр статьи 
$application->addUrlAlias( new Url_Alias('~/articles/([a-zA-Z0-9_\-]+)/([a-zA-Z0-9_\-]+)\.html$~''article''view', array('rubric_url''article_url')) ); 
т.е. в базовый класс application я добавляю объекты Url_Alias и Url_Alias_Admin, конструктор которых имеет вид
  • паттерн_в_формате_регулярного выражения
  • имя модуля
  • имя контроллера
  • массив имен переменных, которые будут созданы в объекте Request, а их значениями будут совпадения в (скобках) из регулярного выражения

Далее в application идёт сравнение:

PHP код:
    /**
    * Основной метод, который сопоставляет
    * шаблоны URL из коллекции объектов $this->url_aliases
    * с текущим REQUEST_URI. Если совпадения найдены, то
    * в HttpRequest передается служебная информация о модуле, контроллере
    * frontend или backend части сайта, а так же все переменные запроса.
    * 
    * @access public
    * @param void
    * @return boolean
    */
    
private function parseUrl()
    {
        foreach (
$this->url_aliases as $alias)
        {
            if (
$alias->match($this->request->getRequest()->_path))
            {
                
$this->request->getRequest()->setData($alias->getData());

                return 
true;
            }
        }

        return 
false;
    } 
Очень удобно. Гибкости - 200%.

Последний раз редактировалось miro; 15.09.2009 в 20:08.
miro вне форума   Ответить с цитированием
Старый 16.09.2009, 15:21   #50
Новичок
 
Аватар для Manfred
 
Регистрация: 08.05.2009
Сообщений: 30
Вес репутации: 183
Manfred на пути к лучшему
По умолчанию

Цитата:
Сообщение от BIOHAZARD Посмотреть сообщение
RewriteRule ^(патерн папки без слэша)$ $1/ [R]
RewriteRule ^(.+)\.htm$ $1.html [R]
RewriteRule ^([0-9a-zA-Z_./-]+)$ main/forsef.php?url=$1

патерн папки придумывайте сами исходя из структуры фиктивных адресов
Спасибо - помогает. Только вопрос... Тестировал строку RewriteRule ^(.+)\.htm$ $1.html [R] на денвере

в итоге открывает так:

http://test.ru/Z:/home/test.ru/www/f...ge1/index.html

т.е. появилась в адресной строчки "/Z:/home/test.ru/www" как это убрать??

Добавлено через 5 минут
Походу получилось..
Добавил RewriteBase / RewriteRule ^(.*)\.htm$ $1.html [R=permanent]

Добавлено через 51 минуту
Цитата:
Сообщение от BIOHAZARD Посмотреть сообщение
RewriteRule ^(патерн папки без слэша)$ $1/ [R]
патерн папки придумывайте сами исходя из структуры фиктивных адресов
Не уживаются они вместе! Пишу RewriteRule ^(.+[^/])$ $1/ [R] - весь сайт летит...

Последний раз редактировалось Manfred; 16.09.2009 в 15:21. Причина: Добавлено сообщение
Manfred вне форума   Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Биллинг делает меня богаче! replicant Ошибки при работе с системой 95 06.03.2009 17:29
Легитимное увеличение ТИЦ, кто-ниудь делает? ozz Деловое сотрудничество 24 13.01.2009 19:55
Что делает links.db Walk Вопросы от новичков 8 04.09.2008 09:50
Кто и зачем делает такие топики? imcl Курилка 25 23.05.2008 19:51
Что делает кнопка [обновить тИЦ и PR] ? new Вопросы по работе системы 2 16.01.2008 11:04


Часовой пояс GMT +3, время: 23:03.