RewriteRule по цепочке

Agressive_Pig
На сайте с 15.07.2008
Offline
98
702

Здравствуйте.

Только знакомлюсь с mod_rewrite, поэтому есть непонятный момент.

На сайте преобразование

site.ru/work/ -> site.ru/index.php?module=work

site.ru/work/19/ -> site.ru/index.php?module=work&id=19

Соответственно 2 правила:

RewriteRule ^work/$ /index.php?module=work [L]

RewriteRule ^work/([0-9]+)/$ /index.php?module=work&id=$1 [L]

Можно ли сделать так, чтобы они выполнялись по очереди:

сначала сработало первое

а потом в полученном site.ru/index.php?module=work/19/

заменилась бы оставшаяся часть (если она есть).

L1f
На сайте с 21.04.2008
Offline
79
L1f
#1

[L] этот флаг означает что это правило последнее, и после него остальыне правила выполнять не надо.

Если убрать, то к URL будут применяться и следующие правила.

Выбери себе домен по вкусу (http://l1f.ru/domains/)
siv1987
На сайте с 02.04.2009
Offline
427
#2

А смысл? Все у вас и так правильно написано.

Agressive_Pig
На сайте с 15.07.2008
Offline
98
#3
siv1987:
А смысл? Все у вас и так правильно написано.

Кроме work, есть еще много других путей, и еще цифры в конце могут отсутствовать.

Чтобы не писать для каждого правило, надо объединить все в одно.

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^([A-z]+)/([0-9]*)/*$ /index.php?module=$1$2 [NC]

RewriteRule ^module=([A-z]+)([0-9]+)$ /index.php?module=$1&id=$2 [NC,L]

Вроде как должно вот так работать:

site.ru/work/19/ -> site.ru/index.php?module=work19

site.ru/index.php?module=work19 -> site.ru/index.php?module=work&id=19

Но не работает...

C
На сайте с 28.01.2010
Offline
70
#4
Agressive_Pig:

RewriteRule ^([A-z]+)/([0-9]*)/*$ /index.php?module=$1$2 [NC]

зачем там звездочка в конце условия?

Это - личная подпись. Здесь обычно ставят ссылки на всякие кривые сайты, надеясь получить "жирный бек".
[Удален]
#5

Если нужно получить запрос /index.php?module=work&id=19, попробуйте так:

RewriteRule ^([a-z]+)/(|[0-9]+)(|/)$ index.php?module=$1&id=$2 [L]
Agressive_Pig
На сайте с 15.07.2008
Offline
98
#6
w0den:
Если нужно получить запрос /index.php?module=work&id=19, попробуйте так:

Спасибо. То что нужно )

L1f
На сайте с 21.04.2008
Offline
79
L1f
#7
Agressive_Pig:

RewriteRule ^module=([A-z]+)([0-9]+)$ /index.php?module=$1&id=$2 [NC,L]

В RewriteRule не попадает строка с параметрами (все что идет после "?").

Соотвественно это правило не будет работать.

В вашем случае можно попробовать использовать RewriteCond, как-то так:

RewriteCond %{QUERY_STRING} ^module=([A-z]+)([0-9]+)$

RewriteRule ^(*)$ /index.php?module=%1&id=%2 [L]

PS Решение от w0den, конечно, наиболее верное.

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