до недавних дней мне вот этого хватало , но сайт стал рости поэтому код .htaccess может вырасти раза в 3-4 каким образом можно решить проблему ? оптимизации кода ? и может что неверно в этом коде ? Код (Text): RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_URI} !(.*)/$ RewriteRule ^(.*)$ /$1/ [R=301,L] RewriteRule ^$ /index.php [L] RewriteRule ^([a-zA-Z]+)/$ /index.php?lang=$1 [L] RewriteRule ^([0-9]+)/$ /index.php?prm_city=$1 [L] RewriteRule ^([a-zA-Z]+)/([0-9]+)/$ /index.php?lang=$1&prm_city=$2 [L] RewriteRule ^mas/$ /mas.php [L] RewriteRule ^([a-zA-Z]+)/mas/$ /mas.php?lang=$1 [L] RewriteRule ^mas/([0-9]+)/$ /mas.php?prm_city=$1 [L] RewriteRule ^([a-zA-Z]+)/mas/([0-9]+)/$ /mas.php?lang=$1&prm_city=$2 [L] RewriteRule ^sobrid/$ /sobrid.php [L] RewriteRule ^([a-zA-Z]+)/sobrid/$ /sobrid.php?lang=$1 [L] RewriteRule ^sobrid/([0-9]+)/$ /sobrid.php?prm_city=$1 [L] RewriteRule ^([a-zA-Z]+)/sobrid/([0-9]+)/$ /sobrid.php?lang=$1&prm_city=$2 [L] RewriteRule ^drizuma/$ /drizuma.php [L] RewriteRule ^([a-zA-Z]+)/drizuma/$ /drizuma.php?lang=$1 [L] RewriteRule ^drizuma/([0-9]+)/$ /drizuma.php?prm_city=$1 [L] RewriteRule ^([a-zA-Z]+)/drizuma/([0-9]+)/$ /drizuma.php?lang=$1&prm_city=$2 [L] RewriteRule ^kinot/$ /kinot.php [L] RewriteRule ^([a-zA-Z]+)/kinot/$ /kinot.php?lang=$1 [L] RewriteRule ^kinot/([0-9]+)/$ /kinot.php?prm_city=$1 [L] RewriteRule ^([a-zA-Z]+)/kinot/([0-9]+)/$ /kinot.php?lang=$1&prm_city=$2 [L]
Нафига стока всего в .htaccess??? Вот этого вполне достаточно: Код (Text): RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] Все остальное обрабатывается PHP при помощи регулярных выражений...
ну, так если каждая строчка важна и обработка не может быть перенесена в другое место, то что же Вы оптимизировать хотите? Можете в httpd.conf всё скинуть
zionko, я тебе про то, что все эти строчки нужно убирать из .htaccess и реализовывать весь функционал, который они несут на PHP!!!
ладно к примеру я отпарсил урл получил масив в нужном мне виде и достал все что мне нужно от туда то-есть мне для каждого файла серавно надо делать правило ? RewriteRule . index.php [L] RewriteRule . sobrid.php [L] RewriteRule . drizuma.php [L] RewriteRule . kinot.php [L] и тд
Да забей ты на файл .htaccess вообще! Чего ты к нему привязался! Его задача только в одном - перенаправить все запросы, отличные от запросов к реально существующим файлам, файлу index.php. А дальше вся работа делается в index.php Разбираешь URL регулярными выражениями, а дальше инклюдишь тот файл - который тебе надо: sobrid.php, drizuma.php, kinot.php и.т.п.
вот к примеру урл /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/ как тут определить ? к чему что относится ?
Возьмем абстрактно 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", если хочешь...