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

Статус
В этой теме нельзя размещать новые ответы.

GROB

Гуру форума
Регистрация
28 Мар 2006
Сообщения
177
Реакции
76
Моя реализация ЧПУ, не претендую на уникальность или новую идею, но кому нибудь да пригодится.
+ при такой реализации можно на "входе" пресекать 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
Да, обычно так и делается. Единственное - имхо некошерно руками прописывать кейсы в 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.
 
я иногда просто через 404 делаю, т.е.

Код:
ErrorDocument 404 /bla-bla-script.php

а уже в bla-bla-script.php разгребаю ЧПУ как мне захочется и странички выглядят ну прям как честный .html
 
  • Заблокирован
  • #4
При таком решении засоряются ошибками логи сервера.

... В описанном выше решении странички тоже могут выглядеть как честный html. А также честный .asp, .jsp. и .cfm! :)
 
RewriteRule \.(gif|png|jpg|jpeg|bmp|tif|rar|zip|gz|bz2|exe|css|js|php|html)$ - [L]
Зачем? Чтобы все расширения какие у тебя есть перечислять?

есть штатная проверка на существование файла/папки/линка
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
 
  • Заблокирован
  • #6
А если я хочу отдавать только определенные типы файлов?
Например, 54zsg5s4shell.php не хочу :)
(ну и в рерайт-правиле, разумеется, тогда "php" нету)
 
поставить первым правило, дающее отлуп 403 на запросы .php
контентные ссылки в формат /link/ или link.html
запереть 1 расширение согласись проще чем перечислять уйму

а инжекты футболить на уровне htaccess по словам select & union
если уж так
 
При таком решении засоряются ошибками логи сервера.

а почему засоряется?? скрипт обработки 404-й возвращает честное значение "200 - OK"

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

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

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


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

и отдавать 200 по ненайденой странице в общем случае неправильно, если только ты не парковщик упущеных доменов
 
А вот я на 404 сделал, и увидел, что гугл не видит моих страниц, которые нормально открываются по 404. не могу понять почему. Ведь страницы то открываются, а в статистике гугла - ошибки.
Может можно как-то с этим бороться? А то не индексируются они.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху