Подскажите на счет mod_rewrite, никак не могу решить задачу!

12
P
На сайте с 13.10.2004
Offline
62
1046

Изменяю я динамические УРЛ в статические. Первую задачу я решил, а была она такая: переделать адрес вида http://site/index.php/?ID=23 в вид http://site/23

Но теперь идет как бы второй уровень, т.е. надо уже такой вид http://site/index.php?ID=23&Name=2 переделать в http://site/23/2

Я нигде не видел примеры подобного разбора, везде приводится самый простой пример. Помогите пожалуйста, только на форум надежды остались.

Кстати, чтобы легче было отвечать, приведу код к первому варианту, который работает:

RewriteEngine On

RewriteBase /

RewriteRule ^([0-9]+)$ /index.php?ID=$1

C
На сайте с 19.09.2001
Offline
120
#1

RewriteEngine On

RewriteBase /

RewriteRule ^([0-9]+)$ /index.php?ID=$1

RewriteRule ^([0-9]+)/([0-9]+)$ /index.php?ID=$1&Name=$2

С уважением, Владимир Чернышов. (не)?путевые заметки (http://chernyshov.kiev.ua/)
S
На сайте с 25.12.2003
Offline
173
#2
Как писал Cherny
RewriteEngine On
RewriteBase /
RewriteRule ^([0-9]+)$ /index.php?ID=$1
RewriteRule ^([0-9]+)/([0-9]+)$ /index.php?ID=$1&Name=$2

Я конечно ничего не хочу сказать, но, по-моему, если уже так и писать, то правила в обратном порядке и в конце [L] :).

Красивые сниппеты Google ( https://saney.com/tools/google-snippets-generator.html )
P
На сайте с 13.10.2004
Offline
62
#3

Cherny, точно, спасибо огромное, заработало.

Только вот вопрос еще один: можно сделать чтоб и со слэшем и без слэшей загружалось? А то сейчас если ставить в конце УРЛ слэш то ошибка вылазит, если в коде подправить и дописать слэш (после круглых скобок), то наоборот со слэшем работает а без него нет.

Saney, про L в конце я знаю, потом допишу, а что вы имели ввиду под "правила в обратном порядке", местами что ли строки поменять?

[Удален]
#4
Как писал Piotiger
Cherny, точно, спасибо огромное, заработало.
Только вот вопрос еще один: можно сделать чтоб и со слэшем и без слэшей загружалось? А то сейчас если ставить в конце УРЛ слэш то ошибка вылазит, если в коде подправить и дописать слэш (после круглых скобок), то наоборот со слэшем работает а без него нет.

Saney, про L в конце я знаю, потом допишу, а что вы имели ввиду под "правила в обратном порядке", местами что ли строки поменять?

Оригинал:


RewriteRule ^([0-9]+)/([0-9]+)$ /index.php?ID=$1&Name=$2

Вариант с необязательным слэшем:


RewriteRule ^([0-9]+)/([0-9]+)/?$ /index.php?ID=$1&Name=$2

Приблизительно так.. Универсально - /? перед $. Надеюсь поможет :-)

S
На сайте с 25.12.2003
Offline
173
#5
Как писал Piotiger
Saney, про L в конце я знаю, потом допишу, а что вы имели ввиду под "правила в обратном порядке", местами что ли строки поменять?

Та нет не надо, то я не о том подумал. Все нормально :).

P
На сайте с 13.10.2004
Offline
62
#6

SiGiN, ага, работает, спасибо.

P
На сайте с 13.10.2004
Offline
62
#7

Чтобы ветку не открывать новую, здесь хочу еще раз спросить кое что, столкнулся с новой проблемой. Если кто может, помогите.

Есть вот такая строка:

RewriteRule ^([a-z]+)[/]?$ /input.php?Action=Close [L]

Она работает, но после Action встречаются и другие слова, поэтом у я заменил на вот такую строчку:

RewriteRule ^([a-z]+)[/]?$ /input.php?Action=$1 [L]

И она уже не работает. Сделал все точно так же как и предыдущие строчки, которые работают, разница лишь в том что там цифры а здесь буквы. Как правильно написать?

Подозреваю, что проблема может быть в самом конце строчки, этот $1 я все время пишу во всех строчках, может быть правильно в каждой строчки писать разные цифры или нет разницы? Впрочем ставил в конец и другие цифры, все равно не работает.

[Удален]
#8

Хм.

RewriteRule ^([a-z]+)[/]?$ /input.php?Action=Close [L]

Обозначает, что любое обращение к site.com/[любое кол во маленьких латинских букв][возможная косая черта] будет перенаправлено на ссылку site.com/input.php?action=close

Этот вариант:

RewriteRule ^([a-z]+)[/]?$ /input.php?Action=$1

Почти такой же, как предыдущий, но перебросит на site.com/input.php?action=[любое кол во маленьких латинских букв].. To есть, чтобы вариант сработал - нужно ..

Хм.. Я кажись понял что вы имеете ввиду :-)

Попробуйте так:

RewriteRule ^([A-Za-z]+)[/]?$ /input.php?Action=$1 [L]

Это включит и маленькие и большие латинские буквы :-) И как вариант

RewriteRule ^([A-Za-z0-9]+)[/]?$ /input.php?Action=$1 [L]

Все буквы и цифры.

P
На сайте с 13.10.2004
Offline
62
#9

SiGiN, к сожалению и так не работает. Главное, как только в самом конце $1 заменяю на нужное слово (Close), то сразу работает, ничего понять не могу...

Неужели для каждого слова отдельную строчку писать надо.

[Удален]
#10

Эмс.. А можно конкретный пример?

Можно в личку, если не охота светиться. Я с удовольствием помогу, только я не очень понимаю - какие именно цели преследуются :-)

А если в общем, то

RewriteRule ^([A-Za-z0-9]+)/?$ input.php?Action=$1 [L]

Будет передавать в input.php get запрос с Action равным [чему-то] при урл.ком/[что-то]/

То есть при вышеуказанном RewriteRule, www.site.org/Close/ - то же самое, что www.site.org/input.php?Action=Close.

Лично я для себя делал универсальный mod_rewrite, а потом уже фильтровал запросы на php. То есть .htaccess получается не шибко велик.

PS: Я в своём RewriteRule убрал квадратные скобки вокруг слэша, но не думаю что это будет панацеей.

12

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