im создание сайта с большим количеством параметров. На данный момент я использую этот код в файле .htaccess:
Options +FollowSymLinks RewriteEngine on RewriteBase /epo RewriteRule (.*)/(.*)/(.*)/(.*)/(.*)/$ index.php?section=$1&content=$2&site=$3¶m=$4¶m2=$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: