Переписывание общего htaccess URL - PullRequest
1 голос
/ 27 августа 2010

Даже простой .htaccess доставляет мне головную боль, и мне нужно сделать следующее общее отображение:

http://example.com/project/controllername/key1/val1/key2/val2/.../keyN/valN

-->

http://example.com/project/controllername.xyz?key1=val1&key2=val2...&keyN=valN

пример:

http://example.com/so/pagecontroller/id/1/time/12345/title/helloworld

-->

http://example.com/so/pagecontroller.xyz?id=1&time=12345&title=helloworld

Любое руководство поможет!Особенно с обработкой специальных символов, таких как '/', '?'и '&' (больше?) в ключах и значениях.

EDIT : Для пояснения пути 'project' и 'controllername' являются динамическими - они не являются статическими.Также количество ключей и значений не предопределено!Мне нужна помощь в создании кода файла htaccess и о том, где разместить этот файл в веб-дереве, и если apache требуется перезапускать каждый раз, когда изменяется файл htaccess.Спасибо!

Ответы [ 2 ]

0 голосов
/ 27 августа 2010

Попробуйте эти правила:

RewriteRule ^([^/]+/[^/]+)/([^/]+)/([^/]+)(/.+)?$ $1$4?$2=$3 [QSA,N]
RewriteCond $1 !.+\.xyz$
RewriteRule ^([^/]+/[^/]+)$ $1.xyz [L]
0 голосов
/ 27 августа 2010

Пока вы не хотите выбирать эти специальные символы, у них не должно быть проблем.Правило для вашего примера может быть:

RewriteRule http://example.com/so/pagecontroller/id/([0-9]+)/time/([0-9]+)/title/(.*)$ http://example.com/so/pagecontroller.xyz?id=$1&time=$2&title=$3  

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

RewriteRule http://example.com/so/pagecontroler/(.*) http://example.com/so/pagecontroler.xyz?vars=$1

Чем у вас есть параметр GET с именем «vars» и остальной частью запроса в качестве значения.Затем вы можете разделить различные ключи и значения на стороне сервера, например, с помощью функции explode () PHP.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...