Apache URL переписывает с n аргументами - PullRequest
0 голосов
/ 13 февраля 2010

Я перезаписываю URL и могу выполнить то, что мне нужно, с помощью следующего:

RewriteRule ^([^/]*)/([^/]*)$ index.php?arg1=$1&arg2=$2 [L,QSA]
RewriteRule ^([^/]*)$ index.php?arg1=$1 [L,QSA]

Вы получаете то, что я пытаюсь сделать здесь, я в основном хочу взять полный URL и разобрать его на отдельные аргументы. Таким образом, / blah / test / asdf / hi будет иметь вид arg1 = blah, arg2 = test и т. Д.

Теперь, если я хочу расширить это до 4 или 5 аргументов, мне интересно, есть ли более чистый способ представить это, чем выход с? Arg1 = $ 1 & arg2 = $ 2 & arg3 = $ 3 и т. Д. И т. Д. ' Я видел, как люди делают это программно (просто берут целую строку с косой чертой и анализируют ее в коде), но мне было любопытно, если бы был способ сделать это с помощью Apache.

1 Ответ

1 голос
/ 14 февраля 2010

Вы можете использовать PHP для этого:

$_SERVER['REQUEST_URI_PATH'] = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);

$pathSegments = array_map('rawurldecode', explode('/', substr($_SERVER['REQUEST_URI_PATH'], 1)));

Первая строка - получить только URL-путь из URL-адреса запроса. Другая строка удалит косую черту (substr), разделится на сегменты (explode) и расшифрует каждый сегмент (array_map с помощью rawrurldecode).

Теперь вам просто нужно передать весь запрос на ваш index.php :

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

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

...