mod_rewrite вопрос

12
N
На сайте с 11.08.2004
Offline
176
896

Подскажите как сделать что бы эти правила не конфликтовали между собой:

RewriteRule ^(.*)/(.*)/$ catalog.php?brand=$1&name=$2 [QSA]

RewriteRule ^(.*)/$ catalog.php?brand=$1 [QSA]

Мне нужно что бы страницы вида:

Sony/

Sony/Cyber-DSC-N2/

открывали файл catalog.php соответсвенно с 1 или 2мя переменными

Я по разному пытался ими крутить но получалось что одно из правил не срабатывает

Shtogrin
На сайте с 02.11.2006
Offline
95
#1

RewriteRule ^(.*)/(.*)/$ catalog.php?brand=$1&name=$2 [QSA,L]

RewriteRule ^(.*)/$ catalog.php?brand=$1 [QSA,L]

www.shtogrin.com (http://www.shtogrin.com/). Канцтовары (http://www.invit.com.ua/). 1С Бухгалтерия (http://account.kiev.ua/).
T
На сайте с 04.10.2005
Offline
63
#2

RewriteRule ^([^/]+)/$ catalog.php?brand=$1 [QSA]

RewriteRule ^([^/]+)/([^/]+)/$ catalog.php?brand=$1&name=$2 [QSA]

попробуй так и именно в таком порядке

N
На сайте с 11.08.2004
Offline
176
#3

Я уже разобрался сделав вот так:

RewriteRule ^(.*)/(.*)/$ catalog.php?brand=$1&name=$2 [QSA]

RewriteRule ^(.*)/$ catalog.php?brand=$1&name=$2 [QSA]

А что значит буква L в твоем примере?

N
На сайте с 11.08.2004
Offline
176
#4

Проверил твои примеры оба рабатают!

А что значит [^/]+ и чем она отличается от (.*) ?

T
На сайте с 04.10.2005
Offline
63
#5

а откуда здесь вторая переменная?

Nickk:
RewriteRule ^(.*)/$ catalog.php?brand=$1&name=$2 [QSA]
Shtogrin
На сайте с 02.11.2006
Offline
95
#6
Nickk:
Я уже разобрался сделав вот так:
RewriteRule ^(.*)/(.*)/$ catalog.php?brand=$1&name=$2 [QSA]
RewriteRule ^(.*)/$ catalog.php?brand=$1&name=$2 [QSA]
А что значит буква L в твоем примере?

Второе не совсем правильно, $2 нет

L - последнее правило, если сработало то дальше не надо идти.

T
На сайте с 04.10.2005
Offline
63
#7
Nickk:
Проверил твои примеры оба рабатают!
А что значит [^/]+ и чем она отличается от (.*) ?

это условия такие:

например пишешь так

[^тут начинаешь переберать все символы которых не должно быть в этой строчке, т.е. если в этой строке не должно быть знака / или проверялось только до него, то делай так [^/] можно так же [^a-z] это будет значить что весь английский алфавит не должен быть в строке

(.*) - означает, что здесь могут быть какие то символы, а могут и не быть

(.+) - означает, что тут обязательно должны быть какие то символы, если нет, то и условие не выполняется!

N
На сайте с 11.08.2004
Offline
176
#8

А теперь другой вопрос как сделать так что бы слэш на конке не влиял, и при этом не возникало такой ситуации:

$brand = Sony/Cyber-DSC-N2

вместо

$brand = Sony

$name = Cyber-DSC-N2

которая возникает если:

RewriteRule ^(.*)/(.*)/?$ catalog.php?brand=$1&name=$2 [QSA]

RewriteRule ^(.*)/?$ catalog.php?brand=$1 [QSA]

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

RewriteRule ^(.*)/(.*)/$ catalog.php?brand=$1&name=$2 [QSA]

RewriteRule ^(.*)/?$ catalog.php?brand=$1 [QSA]

RewriteRule ^(.*)/(.*)$ catalog.php?brand=$1&name=$2 [QSA]

RewriteRule ^(.*)$ catalog.php?brand=$1 [QSA]

Если делать так то картинки не показываются несмотря на

RewriteCond %{REQUEST_URI} !images

с вашими примера ошибки аналогичные

Shtogrin
На сайте с 02.11.2006
Offline
95
#9

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.+)/(.+)/$ catalog.php?brand=$1&name=$2 [QSA,L]

RewriteRule ^(.+)/$ catalog.php?brand=$1 [QSA,L]

RewriteRule ^(.+)/(.+)$ catalog.php?brand=$1&name=$2 [QSA,L]

RewriteRule ^(.+)$ catalog.php?brand=$1 [QSA,L]

последнее обрабатывает все запросы /aaa, /bbb, которые не существуют в файловой системе

N
На сайте с 11.08.2004
Offline
176
#10

Да все равно пытается картинки как catalog.php окрывать

12

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