За последние 24 часа нас посетили 153135 программистов и 2936 роботов. Сейчас ищут 1758 программистов ...

mod_rewrite оптимизировать

Тема в разделе "PHP для новичков", создана пользователем zionko, 4 апр 2010.

  1. zionko

    zionko Активный пользователь

    С нами с:
    20 сен 2009
    Сообщения:
    22
    Симпатии:
    0
    до недавних дней мне вот этого хватало , но сайт стал рости

    поэтому код .htaccess может вырасти раза в 3-4

    каким образом можно решить проблему ? оптимизации кода ?
    и может что неверно в этом коде ?


    Код (Text):
    1.  
    2. RewriteEngine On
    3. RewriteCond %{REQUEST_FILENAME} !-f
    4. RewriteCond %{REQUEST_URI} !(.*)/$
    5. RewriteRule ^(.*)$ /$1/ [R=301,L]
    6.  
    7. RewriteRule ^$ /index.php [L]
    8. RewriteRule ^([a-zA-Z]+)/$ /index.php?lang=$1 [L]
    9. RewriteRule ^([0-9]+)/$ /index.php?prm_city=$1 [L]
    10. RewriteRule ^([a-zA-Z]+)/([0-9]+)/$ /index.php?lang=$1&prm_city=$2 [L]
    11.  
    12. RewriteRule ^mas/$ /mas.php [L]
    13. RewriteRule ^([a-zA-Z]+)/mas/$ /mas.php?lang=$1 [L]
    14. RewriteRule ^mas/([0-9]+)/$ /mas.php?prm_city=$1 [L]
    15. RewriteRule ^([a-zA-Z]+)/mas/([0-9]+)/$ /mas.php?lang=$1&prm_city=$2 [L]
    16.  
    17. RewriteRule ^sobrid/$ /sobrid.php [L]
    18. RewriteRule ^([a-zA-Z]+)/sobrid/$ /sobrid.php?lang=$1 [L]
    19. RewriteRule ^sobrid/([0-9]+)/$ /sobrid.php?prm_city=$1 [L]
    20. RewriteRule ^([a-zA-Z]+)/sobrid/([0-9]+)/$ /sobrid.php?lang=$1&prm_city=$2 [L]
    21.  
    22. RewriteRule ^drizuma/$ /drizuma.php [L]
    23. RewriteRule ^([a-zA-Z]+)/drizuma/$ /drizuma.php?lang=$1 [L]
    24. RewriteRule ^drizuma/([0-9]+)/$ /drizuma.php?prm_city=$1 [L]
    25. RewriteRule ^([a-zA-Z]+)/drizuma/([0-9]+)/$ /drizuma.php?lang=$1&prm_city=$2 [L]
    26.  
    27. RewriteRule ^kinot/$ /kinot.php [L]
    28. RewriteRule ^([a-zA-Z]+)/kinot/$ /kinot.php?lang=$1 [L]
    29. RewriteRule ^kinot/([0-9]+)/$ /kinot.php?prm_city=$1 [L]
    30. RewriteRule ^([a-zA-Z]+)/kinot/([0-9]+)/$ /kinot.php?lang=$1&prm_city=$2 [L]
     
  2. niko28

    niko28 Активный пользователь

    С нами с:
    19 авг 2009
    Сообщения:
    19
    Симпатии:
    0
    Нафига стока всего в .htaccess???

    Вот этого вполне достаточно:
    Код (Text):
    1.  
    2. RewriteEngine On  
    3. RewriteCond %{REQUEST_FILENAME} !-f  
    4. RewriteCond %{REQUEST_FILENAME} !-d  
    5. RewriteRule . index.php [L]  
    Все остальное обрабатывается PHP при помощи регулярных выражений...
     
  3. zionko

    zionko Активный пользователь

    С нами с:
    20 сен 2009
    Сообщения:
    22
    Симпатии:
    0
    niko28

    тебе расписать зачем каждая строчка ?
    это не одно и тоже все
     
  4. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    ну, так если каждая строчка важна и обработка не может быть перенесена в другое место, то что же Вы оптимизировать хотите?

    Можете в httpd.conf всё скинуть
     
  5. niko28

    niko28 Активный пользователь

    С нами с:
    19 авг 2009
    Сообщения:
    19
    Симпатии:
    0
    zionko, я тебе про то, что все эти строчки нужно убирать из .htaccess и реализовывать весь функционал, который они несут на PHP!!!
     
  6. zionko

    zionko Активный пользователь

    С нами с:
    20 сен 2009
    Сообщения:
    22
    Симпатии:
    0
    niko28

    а можно пример того как это в пхп должно выглядеть ?
     
  7. zionko

    zionko Активный пользователь

    С нами с:
    20 сен 2009
    Сообщения:
    22
    Симпатии:
    0
    ладно к примеру я отпарсил урл
    получил масив в нужном мне виде и достал все что мне нужно от туда

    то-есть мне для каждого файла серавно надо делать правило ?

    RewriteRule . index.php [L]
    RewriteRule . sobrid.php [L]
    RewriteRule . drizuma.php [L]
    RewriteRule . kinot.php [L]

    и тд
     
  8. niko28

    niko28 Активный пользователь

    С нами с:
    19 авг 2009
    Сообщения:
    19
    Симпатии:
    0
  9. zionko

    zionko Активный пользователь

    С нами с:
    20 сен 2009
    Сообщения:
    22
    Симпатии:
    0
    niko28


    нафига тут инклуде ?
    если идет речь о парсинге и файле .htaccess куда тут инклудить и что ?
     
  10. niko28

    niko28 Активный пользователь

    С нами с:
    19 авг 2009
    Сообщения:
    19
    Симпатии:
    0
    Да забей ты на файл .htaccess вообще! Чего ты к нему привязался! Его задача только в одном - перенаправить все запросы, отличные от запросов к реально существующим файлам, файлу index.php. А дальше вся работа делается в index.php

    Разбираешь URL регулярными выражениями, а дальше инклюдишь тот файл - который тебе надо: sobrid.php, drizuma.php, kinot.php и.т.п.
     
  11. zionko

    zionko Активный пользователь

    С нами с:
    20 сен 2009
    Сообщения:
    22
    Симпатии:
    0
    вот к примеру урл

    /ru/sobrid/main/
    я его разбераю
    на
    --ru -- _get[ru]
    --sobrid -- _get[sobrid]
    --main -- _get[main]
    --p1 -- _get[p1]

    но есть вареации урл-а
    /sobrid/
    /sobrid/main/
    /sobrid/main/p1/
    /ru/sobrid/main/
    /ru/sobrid/main/p1/

    как тут определить ? к чему что относится ?
     
  12. niko28

    niko28 Активный пользователь

    С нами с:
    19 авг 2009
    Сообщения:
    19
    Симпатии:
    0
    Возьмем абстрактно URL: /u1/u2/u3 ...

    Разобъем его в массив:

    $uri[1]="u1"
    $uri[2]="u2"
    $uri[3]="u3"
    ......

    Затем:

    switch($uri[1]) {
    case sobrid:
    ....
    здесь можно инклюдить sobrid.php, уже в котором можно анализировать $uri[2]
    ....
    break;
    case drizuma:
    ...
    break;
    и т.д.
    }

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

    можешь перед sobrid, drizuma и т.п. проверит сначала на наличие "ru", если хочешь...