Как переписать URL для нескольких параметров запроса? - PullRequest
1 голос
/ 27 апреля 2010

Как переписать URL как:

http://domain.com/class/method/parameter1/parameter2/.../parameterN

до

http://domain.com/index.php?c=class&m=method&p1=parameter1&...&pN=parameterN

Основная идея - создать возможность использования неограниченного количества параметров запроса.

Спасибо.

1 Ответ

3 голосов
/ 27 апреля 2010

Это можно сделать с помощью модуля Apache mod_rewrite , например:

RewriteRule ^/([^/]+/[^/]+)/([^/]+)(/.+)?$ /$1$3?p[]=$2 [N,QSA]
RewriteRule ^/([^/]+)/([^/]+)$ /index.php?c=$1&m=$2 [L,QSA]

Но это определенно было бы проще сделать с PHP:

$_SERVER['REQUEST_URI_PATH'] = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
$segments = explode('/', trim($_SERVER['REQUEST_URI_PATH'], '/'));
if (count($segments) >= 2) {
    $_GET['class'] = array_shift($segments);
    $_GET['m'] = array_shift($segments);
    $_GET['p'] = $segments;
} else {
    // error
}

Тогда вам просто нужно одно правило переписать запросы:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule !^index\.php$ index.php [L]
...