PHP vs mod_rewrite

Discussion in 'PHP' started by Trinux, 28 Apr 2005.

  1. Trinux

    Trinux Members of Antichat

    Joined:
    26 Nov 2004
    Messages:
    1,403
    Likes Received:
    296
    Reputations:
    364
    Всем здарова. Сразу просьба, все описанное ниже пока только для античата, не распространяйте пожалуйсто. На эту тему напишу статью грамотную, но позже. А пока только введение.

    ЧПУ. Что такое ЧПУ? ЧПУ это Человечески Понятный Урл. Например http://forum.antichat.ru/showthread.php?p=35414 обычный урл, а http://antichat.ru/2005/04/08/.htm - ЧПУ. Это сейчас появилось такое название ЧПУ. Раньше, когда небыло всяких там php, это был обычный урл. Вообще наблюдается странная тенденция =) Сначала все писали на html и иметь в адрес типа blablabla.ru/?page=news было модным. Теперь все пишут на php и модным иметь адрес типа blablabla.ru/news.html =) Реализовать это можно как минимум 2-мя способами. Через mod_rewrite или серверный язык. В нашем случае серверным языком является php.

    Начнем. Сначало подумаем. Чисто теоритически, что быстрее будет работать? Реализация ЧПУ через .htaccess по средствам mod_rewrite или же средстами php, обрабатывая 404 ошибку. Чисто теоритически кажется, что mod_rewrite работает на более нихзком уровне и обрабатывает строку быстрее. Фиг там =) наглая лож. Начем с того, что mod_rewrite не работает на более низком уровне к серверу. Он работает на том же самом уровне, что и php. Потому что php это такой же модуль апача, что и mod_rewrite =) mod_php только называется =))) Мало того, идем дальше. При запросе http://antichat.ru/2005/04/08/.htm апач будет искать .htaccess во всех каталогах в представленном урле (а тут их 4, если глаза меня не обманывают) найдет ваш htaccess, спарсит его и только потом начнет выполнять правила. Мало того, на php все намного гибче, чем на mod_rewrite. Так что не верьте тому, кто будет рвать волосы на голове и утверждать что .htaccess быстрее обрабатывает ЧПУ =)

    К пример еще отмечу что на nnm.ru нагрузка на CPU упала ровно в 2 раза (-100%) после переноса htaccess`а в конфиг виртуальника. И это, замечу, пока без перевода ЧПУ на плечи php. там еще 10-30% экономии, думаю, будет.

    Пока все =)
     
    _________________________
  2. nerezus

    nerezus Banned

    Joined:
    12 Aug 2004
    Messages:
    3,191
    Likes Received:
    729
    Reputations:
    266
    >Сразу просьба, все описанное ниже пока только для античата,
    > не распространяйте пожалуйсто.
    так это все известно давно =О
     
  3. BNF

    BNF Elder - Старейшина

    Joined:
    16 Apr 2005
    Messages:
    55
    Likes Received:
    1
    Reputations:
    0
    что значит: "после переноса htaccess`а в конфиг виртуальника" ?
    В смысле в httpd.conf?
     
  4. Trinux

    Trinux Members of Antichat

    Joined:
    26 Nov 2004
    Messages:
    1,403
    Likes Received:
    296
    Reputations:
    364
    Ну уж звиняйте тогда, лично дляменя это было новым. Дело даже не в подходе, а в выводе. Когда сервер стал падать от поситителе nnm.ru встал вопрос оптимизации. Я знал что это даст выгоды ну 10-20%, но не 100% же.

    угу
     
    _________________________
  5. wsr

    wsr New Member

    Joined:
    20 Apr 2005
    Messages:
    9
    Likes Received:
    0
    Reputations:
    0
    Расскажи по подробней, о обработке ошибки отсутствия документа!!!
    Как это все реализовать?
     
  6. Trinux

    Trinux Members of Antichat

    Joined:
    26 Nov 2004
    Messages:
    1,403
    Likes Received:
    296
    Reputations:
    364
    Все просто. Т.е. в htaccess пишешь что-то типа
    ErrorDocument 404 /index.php
    т.е. при ошибке будет редирект на index.php а там ты уже обрабатываешь серверную переменную SCRIPT_URI или SCRIPT_URL, смотря как там сервер настроен. И все.

    НО! Переведя полностью nnm на ЧПУ с помощью php я понял что это не правильно. Ибо при смене заголовка на 404 (а он меняется апачем по любому, при испольхования данного метода) отчищается весь POST, а это плохо. Я юзаю <form method=post> говорите что угодно, но это самый безопасный метод передачи данных, у меня куча фактов, но сейчас не о этом. Я пришел к выводу что топ нужно было назвать на PHP vs mod_rewrite а PHP and mod_rewrite. Все ЧПУ формируется на PHP, но .htccess должен содержать следующий текст

    ErrorDocument 404 /404.html
    DirectoryIndex index.php
    RewriteEngine on
    RewriteRule ^/.*(.html|/)$ /index.php

    В данном случае как раз, как можете заметить, все данные будут помещены в переменную SCRIPT_URI без передачи ее в строке. Для меня это идеально, ибо чем меньше передачи данных - тем меньше нагрузка на сервер, а для меня это критично. Либо htaccess может содержать что-то типа

    ErrorDocument 404 /404.php
    DirectoryIndex index.php
    RewriteEngine on

    RewriteCond %{THE_REQUEST} !\.css
    RewriteCond %{THE_REQUEST} !\.jpg
    RewriteCond %{THE_REQUEST} !\.gif
    RewriteCond %{THE_REQUEST} !\.png
    RewriteCond %{THE_REQUEST} !\?
    RewriteRule ^/.*$ index.php?url_data=%{THE_REQUEST}

    Но это все уже зависит от случая, когда что. Лично мне больше подходит первый способ. Скоро напишу статью, скоро.
     
    _________________________
  7. nerezus

    nerezus Banned

    Joined:
    12 Aug 2004
    Messages:
    3,191
    Likes Received:
    729
    Reputations:
    266
    -50% :)

    а если так? типа 404, но post не теряется
     
  8. Trinux

    Trinux Members of Antichat

    Joined:
    26 Nov 2004
    Messages:
    1,403
    Likes Received:
    296
    Reputations:
    364
    Хо хо ))) будемспорить? =) Нагрузка была почти 200 процентов, стала 90. 200 - 50 = 90 ? =)))
    ХЗ не пробовал.
     
    _________________________
  9. nerezus

    nerezus Banned

    Joined:
    12 Aug 2004
    Messages:
    3,191
    Likes Received:
    729
    Reputations:
    266
    >Хо хо ))) будемспорить? =) Нагрузка была почти 200 процентов, стала 90. 200 - 50 = 90 ? =)))

    а почему это было 200? целое - сто процентов =)
     
  10. Trinux

    Trinux Members of Antichat

    Joined:
    26 Nov 2004
    Messages:
    1,403
    Likes Received:
    296
    Reputations:
    364
    Проца то 2 =)))
     
    _________________________
  11. nerezus

    nerezus Banned

    Joined:
    12 Aug 2004
    Messages:
    3,191
    Likes Received:
    729
    Reputations:
    266
    Сервер весь под твой сай... проект?
     
    #11 nerezus, 13 May 2005
    Last edited: 13 May 2005
  12. Trinux

    Trinux Members of Antichat

    Joined:
    26 Nov 2004
    Messages:
    1,403
    Likes Received:
    296
    Reputations:
    364
    Но нагрузка то на 100% упала =)
     
    _________________________