Моя реализация ЧПУ

Тема в разделе "Mod Rewrite / htaccess / ЧПУ", создана пользователем GROB, 10 сен 2008.

Статус темы:
Закрыта.
  1. GROB

    GROB

    Регистр.:
    28 мар 2006
    Сообщения:
    177
    Симпатии:
    63
    Моя реализация ЧПУ, не претендую на уникальность или новую идею, но кому нибудь да пригодится.
    + при такой реализации можно на "входе" пресекать SQL-инъекцию.

    .htaccess
    Код:
    RewriteEngine on 
    RewriteBase / 
    RewriteRule \.(gif|png|jpg|jpeg|bmp|tif|rar|zip|gz|bz2|exe|css|js|php|html)$ - [L] 
    RewriteRule ^(.*)$ /index.php?page=$1
    
    index.php
    Код:
    if (isset($_GET['page']) && !empty($_GET['page']))
      {
        $url = $_GET['page'];
        
        // Чистим $url от мусора в виде одинарных и двойных кавычек и т.д.
    
          // Разбиваем адрес на массив и определяем запрашиваемый модуль
          $urlarray = preg_split('[/]', $url);
            switch ($urlarray[0])
              {
              	case 'registration': require_once(DVD_ROOT_PATH.'/registration.php'); break;
              	case 'forgetpass': require_once(DVD_ROOT_PATH.'/forgetpass.php'); break;
              }
    
        exit();
    
    В соответствующем модуле анализируются $urlarray[1], $urlarray[2] и т.д. на основании чего и выводится нужная информация.
     
  2. Jameson

    Jameson Читатель

    Заблокирован
    Регистр.:
    25 июн 2007
    Сообщения:
    406
    Симпатии:
    92
    Да, обычно так и делается. Единственное - имхо некошерно руками прописывать кейсы в index.php.

    Универсальнее в базе хранить список модулей, находить нужный по его никнейму, который = $urlarray[0], подключать и передавать ему управление.

    Если же никакой модуль не подходит, значит, в запросе виртуальный путь к папкам/текстам. Т.е. загружается модуль, ответственный за отображение папок и текстов, и ему отдается весь массив $urlarray.

    Таким образом можно делать тру-ЧПУшные сайты, где разделы не так именуются

    site.com/category/about_us/
    site.com/category/contacts/
    site.com/category/articles/

    а, к примеру, так:

    site.com/about/company/
    site.com/articles/howto/home-master/

    что, несомненно, лучше для SEO.
     
  3. zerdek

    zerdek

    Регистр.:
    29 ноя 2007
    Сообщения:
    346
    Симпатии:
    50
    я иногда просто через 404 делаю, т.е.

    Код:
    ErrorDocument 404 /bla-bla-script.php
    
    а уже в bla-bla-script.php разгребаю ЧПУ как мне захочется и странички выглядят ну прям как честный .html
     
  4. Jameson

    Jameson Читатель

    Заблокирован
    Регистр.:
    25 июн 2007
    Сообщения:
    406
    Симпатии:
    92
    При таком решении засоряются ошибками логи сервера.

    ... В описанном выше решении странички тоже могут выглядеть как честный html. А также честный .asp, .jsp. и .cfm! :)
     
  5. judgefog

    judgefog

    Регистр.:
    12 авг 2006
    Сообщения:
    487
    Симпатии:
    335
    Зачем? Чтобы все расширения какие у тебя есть перечислять?

    есть штатная проверка на существование файла/папки/линка
     
  6. Jameson

    Jameson Читатель

    Заблокирован
    Регистр.:
    25 июн 2007
    Сообщения:
    406
    Симпатии:
    92
    А если я хочу отдавать только определенные типы файлов?
    Например, 54zsg5s4shell.php не хочу :)
    (ну и в рерайт-правиле, разумеется, тогда "php" нету)
     
  7. judgefog

    judgefog

    Регистр.:
    12 авг 2006
    Сообщения:
    487
    Симпатии:
    335
    поставить первым правило, дающее отлуп 403 на запросы .php
    контентные ссылки в формат /link/ или link.html
    запереть 1 расширение согласись проще чем перечислять уйму

    а инжекты футболить на уровне htaccess по словам select & union
    если уж так
     
  8. zerdek

    zerdek

    Регистр.:
    29 ноя 2007
    Сообщения:
    346
    Симпатии:
    50
    а почему засоряется?? скрипт обработки 404-й возвращает честное значение "200 - OK"

    PHP
    header("HTTP/1.1 200 OK");

    PERL
    print"Content-Type: text/html\nStatus: 200 OK\n\n";

    с логами веб сервера - все ок.


    хотя что то решение, что это - это тоже самое, но в профиль :) по сути это дело вкуса и как кому больше равится и кто к чему привык.
     
  9. judgefog

    judgefog

    Регистр.:
    12 авг 2006
    Сообщения:
    487
    Симпатии:
    335
    да потому что апач сначала пишет в логи что не найдено
    а потом уже смотрит страницу для выдачи

    и отдавать 200 по ненайденой странице в общем случае неправильно, если только ты не парковщик упущеных доменов
     
  10. virtualbrest

    virtualbrest

    Регистр.:
    6 май 2007
    Сообщения:
    210
    Симпатии:
    18
    А вот я на 404 сделал, и увидел, что гугл не видит моих страниц, которые нормально открываются по 404. не могу понять почему. Ведь страницы то открываются, а в статистике гугла - ошибки.
    Может можно как-то с этим бороться? А то не индексируются они.
     
Статус темы:
Закрыта.