PDA

Просмотр полной версии : PHP vs mod_rewrite


Trinux
28.04.2005, 18:08
Всем здарова. Сразу просьба, все описанное ниже пока только для античата, не распространяйте пожалуйсто. На эту тему напишу статью грамотную, но позже. А пока только введение.

ЧПУ. Что такое ЧПУ? ЧПУ это Человечески Понятный Урл. Например 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% экономии, думаю, будет.

Пока все =)

nerezus
28.04.2005, 19:33
>Сразу просьба, все описанное ниже пока только для античата,
> не распространяйте пожалуйсто.
так это все известно давно =О

BNF
28.04.2005, 20:05
что значит: "после переноса htaccess`а в конфиг виртуальника" ?
В смысле в httpd.conf?

Trinux
28.04.2005, 20:15
так это все известно давно =О
Ну уж звиняйте тогда, лично дляменя это было новым. Дело даже не в подходе, а в выводе. Когда сервер стал падать от поситителе nnm.ru встал вопрос оптимизации. Я знал что это даст выгоды ну 10-20%, но не 100% же.

что значит: "после переноса htaccess`а в конфиг виртуальника" ?
В смысле в httpd.conf?
угу

wsr
01.05.2005, 15:53
Ну уж звиняйте тогда, лично дляменя это было новым. Дело даже не в подходе, а в выводе. Когда сервер стал падать от поситителе nnm.ru встал вопрос оптимизации. Я знал что это даст выгоды ну 10-20%, но не 100% же.


угу
Расскажи по подробней, о обработке ошибки отсутствия документа!!!
Как это все реализовать?

Trinux
01.05.2005, 17:22
Расскажи по подробней, о обработке ошибки отсутствия документа!!!
Как это все реализовать?
Все просто. Т.е. в 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}

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

nerezus
10.05.2005, 15:50
упала ровно в 2 раза (-100%)-50% :)

Action throw /index.php

<FilesMatch "^([^.]+)$">
ForceType throw
</FilesMatch>

<FilesMatch index.php>
ForceType application/x-httpd-php
</FilesMatch>а если так? типа 404, но post не теряется

Trinux
11.05.2005, 04:03
-50% :)

Хо хо ))) будемспорить? =) Нагрузка была почти 200 процентов, стала 90. 200 - 50 = 90 ? =)))

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

ХЗ не пробовал.

nerezus
11.05.2005, 06:30
>Хо хо ))) будемспорить? =) Нагрузка была почти 200 процентов, стала 90. 200 - 50 = 90 ? =)))

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

Trinux
11.05.2005, 10:44
>Хо хо ))) будемспорить? =) Нагрузка была почти 200 процентов, стала 90. 200 - 50 = 90 ? =)))

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

nerezus
13.05.2005, 16:24
Сервер весь под твой сай... проект?

Trinux
13.05.2005, 21:25
Но нагрузка то на 100% упала =)