Даже простой .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.Спасибо!
Попробуйте эти правила:
RewriteRule ^([^/]+/[^/]+)/([^/]+)/([^/]+)(/.+)?$ $1$4?$2=$3 [QSA,N] RewriteCond $1 !.+\.xyz$ RewriteRule ^([^/]+/[^/]+)$ $1.xyz [L]
Пока вы не хотите выбирать эти специальные символы, у них не должно быть проблем.Правило для вашего примера может быть:
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.