Mod-rewrite : Из динамики в статику

12
MaxB
На сайте с 29.04.2003
Offline
110
2587

Вот уже сутки пытаюсь сделать из динамического сайта подобие статики чтобы Рамблер не давился, да и всем приятнее было :).

Пользуюсь модулем Mod_rewrite.

Привожу варианты оригинальных строк с сайта:

http://XXX.ru/A.php?cat=12345 и
http://XXX.ru/A.php?cat=12345&page=1

Хочу переделать соответственно в:

http://XXX.ru/baza/12345 и
http://XXX.ru/baza/12345/page1

Что я для этого делаю? :

RewriteEngine on
RewriteRule ^baza/(.*)/page(.*) /A.php?cat=$1&page=$2 [L]

В этом случае вариант второй строки проходит идеально, а вот первая дает ошибку. Подскажите пожалуйста как сделать правильно. Можно ли одной строкой RewriteRule покрыть оба варианта строки?

Заранее благодарен.

InSAn
На сайте с 13.01.2003
Offline
60
#1

RewriteRule ^baza/([a-z]+)/(page)*([0-9]*) /A.php?cat=$1&page=$3 [L]

Вот только я бы УРЛы вызывал иначе, а именно:

/baza.12345.page1.html ;)

ADPRO - Мы знаем, что Вам нужно! (http://adpro.ua)
MaxB
На сайте с 29.04.2003
Offline
110
#2

InSAn, ОГРОМНЕЙШЕЕ спасибо!

Думаю, что и совет про урлы тоже учту :)

MaxB
На сайте с 29.04.2003
Offline
110
#3
Как писал InSAn
RewriteRule ^baza/([a-z]+)/(page)*([0-9]*) /A.php?cat=$1&page=$3 [L]
Вот только я бы УРЛы вызывал иначе, а именно:

/baza.12345.page1.html ;)

Ну чтож я такой тупой... Или уже голова не варит...

InSAn, Ваше правило не заработало.

Решил сделать как Вы посоветовали (/baza.12345.1.html ), но хоть убей, не получается. Работает или первый вариант или второй.

Кстати, сразу вопрос. Причем здесь ([a-z]+), когда речь идет о числах?

Короче, решил делать по схеме /baza.12345.10.html (где 10 -номер стр)

Пишу: RewriteRule ^baza.([0-9]+).([0-9]*).html /A.php?cat=$1&page=$2 [L] -Работает только строка http://XXX.ru/A.php?cat=12345&page=10, строка http://XXX.ru/A.php?cat=12345 дает ошибку (не передается &page=10).

Пишу: RewriteRule ^baza.([0-9]+).*([0-9]*).html /A.php?cat=$1&page=$2 [L] -работает строка http://XXX.ru/A.php?cat=12345, а http://XXX.ru/A.php?cat=12345&page=10 не работает (выводится http://XXX.ru/A.php?cat=12345).

Помогите разобраться с синтаксисом.

InSAn
На сайте с 13.01.2003
Offline
60
#4
Причем здесь ([a-z]+), когда речь идет о числах?

Да, сорри, нужно [0-9]

Короче, решил делать по схеме /baza.12345.10.html (где 10 -номер стр)
Пишу: RewriteRule ^baza.([0-9]+).([0-9]*).html /A.php?cat=$1&page=$2 [L]

RewriteRule ^baza\.([0-9]+)\.p([0-9]+)\.html /A.php?cat=$1&page=$2 [L]

RewriteRule ^baza\.([0-9]+)\.html /A.php?cat=$1&page=1 [L]

Вызывать соответственно:

baza.12345.p10.html и baza.12345.html

Во втором случае по умолчанию page=1

MaxB
На сайте с 29.04.2003
Offline
110
#5
Как писал InSAn

Да, сорри, нужно [0-9]

RewriteRule ^baza\.([0-9]+)\.p([0-9]+)\.html /A.php?cat=$1&page=$2 [L]
RewriteRule ^baza\.([0-9]+)\.html /A.php?cat=$1&page=1 [L]

Вызывать соответственно:
baza.12345.p10.html и baza.12345.html
Во втором случае по умолчанию page=1

Спасибо, всё получилось. Только жаль, что нельзя оба варианта решить одной строкой.

Единственное понять не могу. Какую роль здесь играют обратные слеши перед точками?

InSAn
На сайте с 13.01.2003
Offline
60
#6
Спасибо, всё получилось. Только жаль, что нельзя оба варианта решить одной строкой

Можно. Но быстрее работать не будет. Вернее, даже наоборот :)

роль здесь играют обратные слеши перед точками?

Точка в левой части подразумевает любой символ.

Слеш перед ней - интерпретация именно "точки".

MaxB
На сайте с 29.04.2003
Offline
110
#7

Примного благодарен, теперь все работает :D

LS
На сайте с 11.01.2004
Offline
162
#8

помогите пожалуйста с:

http://url/index.php?action=view&view=category&catid=31&catflag=4&sublevel=2

в http://url/31/4/2

http://url/index.php?&action=view&view=category&catid=31&catflag=4&sublevel=2&start=10

в http://url/31/4/2/10.html

http://url/index.php?action=view&view=entry&entryid=478

в http://url/478.html

Спасибо!

MaxB
На сайте с 29.04.2003
Offline
110
#9
Как писал LaSet
помогите пожалуйста с:

http://url/index.php?action=view&view=category&catid=31&catflag=4&sublevel=2

в http://url/31/4/2

Кажется так:

RewriteRule ^([0-9]+)/([0-9]+)/([0-9]+) /index.php?action=view&view=category&catid=$1&catflag=$2&sublevel=$3 [L]

Я не знаю, является ли символ "/" - зарезервированным для регулярных выражений, поэтому если не получится, то везде перед ним ставить "\"

т.е.

RewriteRule ^([0-9]+)\/([0-9]+)\/([0-9]+) /index.php?action=view&view=category&catid=$1&catflag=$2&sublevel=$3 [L]

RewriteRule ^([0-9]+)/([0-9]+)/([0-9]+)/([0-9]+)\.html /index.php?action=view&view=category&catid=$1&catflag=$2&sublevel=$3&start=$4 [L]

RewriteRule ^([0-9]+)\.html /index.php?action=view&view=entry&entryid=$1[L]

H
На сайте с 15.01.2004
Offline
3
#10

а как сделать так:

человек набирает в браузере index.php?a=1&b=2

сервер выдает эту страницу

но в браузере отображается адрес, например, вида page1.ask2.html и при этом чтобы работал так же и прямой набор адреса page1.ask2.html, отображающий туже самую страницу?

делаю так - но редиректа не происходит

RewriteRule ^page([0-9]+)\.ask([0-9]+)\.html /index.php?a=$1&b=$2 [R,L]

12

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