Mod Rewrite – есть ли более быстрый способ?

im создание сайта с большим количеством параметров. На данный момент я использую этот код в файле .htaccess:

Options +FollowSymLinks RewriteEngine on RewriteBase /epo RewriteRule (.*)/(.*)/(.*)/(.*)/(.*)/$ index.php?section=$1&content=$2&site=$3&param=$4&param2=$5 [QSA] RewriteRule (.*)/(.*)/(.*)/(.*)/$ index.php?section=$1&content=$2&site=$3&subsite=$4 [QSA] RewriteRule (.*)/(.*)/(.*)/$ index.php?section=$1&content=$2&site=$3 [QSA] RewriteRule (.*)/(.*)/$ index.php?section=$1&content=$2 [QSA] RewriteRule (.*)/$ index.php?section=$1 [QSA] RewriteCond %{REQUEST_URI} ^/[^\.]+[^/]$ RewriteRule ^(.*)$ http://%{HTTP_HOST}%{REQUEST_URI}/ [R=301,L] 

Я новичок в mod_rewrite, поэтому этот код беспорядок. Есть ли лучший способ справиться со всеми этими параметрами? Последние две строки только что добавят «/» в конце, если их нет. Было бы здорово, если бы кто-то мог объяснить их код, поэтому я могу понять, что я сделал неправильно 🙂

Лично я перенаправляю весь запрос в один файл, а затем обрабатываю его оттуда.

 RewriteRule ^(.*)$ index.php?path=$1 [QSA] 

И тогда в index.php используйте что-то вроде

 $params = explode('/', $_GET['path']; $section = $params[0]; $content = $params[1]; $site = $params[2]; $subsite = $params[3]; //etc. 

Имейте в виду, что вам нужна дополнительная проверка по всем параметрам

Это похоже на пример Хьюго, но без параметра GET :

 <IfModule mod_rewrite.c> SetEnv HTTP_MOD_REWRITE On RewriteEngine On RewriteCond %{REQUEST_FILENAME} -s [OR] RewriteCond %{REQUEST_FILENAME} -l [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^.*$ - [NC,L] RewriteRule ^.*$ index.php [NC,L] </IfModule> 

в PHP вы можете сделать следующее:

 $pathInfo = pathinfo($_SERVER['SCRIPT_NAME']); $baseUrl = $pathInfo['dirname']; $baseFile = $pathInfo['basename']; $url = rtrim(str_replace([$baseUrl, '/'.$baseFile], '', $_SERVER['REQUEST_URI']), '/'); $method = strtolower($_SERVER['REQUEST_METHOD']); $isModRewrite = array_key_exists('HTTP_MOD_REWRITE', $_SERVER); 

Теперь ваш url может выглядеть примерно так:

 http://www.yourserver.com/param1/param2 

ИЛИ (если модификация мод не включена)

 http://www.yourserver.com/index.php/param1/param2 

В обоих случаях переменная $url выглядит как /param1/param2

Вы можете explode эту строку или передать библиотеку маршрутизации PHP этой строкой для извлечения ваших параметров.

Библиотеки примеров маршрутизации PHP:

https://github.com/robap/php-router

https://github.com/deceze/Kunststube-Router