Вопрос по mod_rewrite, реализация структуры url

Nunan
На сайте с 15.08.2008
Offline
78
545

Необходимо реализовать структуру страниц сайта в таком виде:

/news

/news/1

/news/1/2092

/news/1/2092

/news/1?sort=date

В .htaccess я прописал правило RewriteRule,

RewriteRule ^([^/]+)/?([^/]+)?/?([^/]*)?$ index.php?1=$1&2=$2&3=$3

но мне удается только реализовать варианты url без "?......", потому что после преобразования "/news/1?sort=date", все что после "?" не передается, в массиве $_GET их нет.

Как мне сделать полностью работоспособной url - "/news/1?sort=date"

Ins1ght
На сайте с 05.10.2007
Offline
22
#1

почему бы не реализовать вместо "/news/1?sort=date" -> "/news/1/sort/date", помоему, это намного нагляднее чем куча спец. символов в URL, да и легко в реализации

D8
На сайте с 16.06.2007
Offline
74
dm8
#2

неудивительно что не передается, вот да же ковыряться не хочется, вы вообще понимаете что значит ([^/]+) и я уж молчу что дальше. + означает присутствие хотя бы одного символа, а значит правило для первого.. и т.д. случаев не подходит.

И правила нужно/стоит прописывать от большего к меньшему.

Кстати вариант "/news/1/sort/date" - более правильный в любом случае.

Dreammaker
На сайте с 20.04.2006
Offline
569
#3
Nunan:
Как мне сделать полностью работоспособной url - "/news/1?sort=date"

не мудрите лишнего, передавайте всё в скрипт, а там уже $_SERVER['REQUEST_URI'] распарсивайте.

Где-то так:

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.*)$ /index.php/$1 [L]
D8
На сайте с 16.06.2007
Offline
74
dm8
#4

не,

Dreammaker:
RewriteRule ^(.*)$ /index.php/$1 [L]

Такое сработает только при грамотном разборе внутри скрипта, а задача стояла немного другая...

Dreammaker
На сайте с 20.04.2006
Offline
569
#5
dm8:
а задача стояла немного другая...

судя по всему, задача - создавать себе проблемы на пустом месте :)

D8
На сайте с 16.06.2007
Offline
74
dm8
#6

Dreammaker,

что есть, то есть конечно, :) но я тоже предпочитаю разбирать переменные на уровне mod_rewrite

Так как-то надежнее чтоли, а может дело привычки.

Nunan
На сайте с 15.08.2008
Offline
78
#7

Остановился на

RewriteRule ^(.*)$ /index.php/$1 [L]

и разбивке $_SERVER['REQUEST_URI'] на составляющие функциями php

/news/1/sort/date - не совсем удобен, потомучто вдруг я захожу сделать четвертым - другой параметр, тогда пришлось бы мудрить типа:

/news/1/sort/sort/date или /news/1/sort/view/*** или еще как нибудь.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий