не срабатывает mod_rewrite

sage

Новичок
не срабатывает mod_rewrite

Файл .htaccess:
Код:
RewriteEngine On
Options +FollowSymLinks

RewriteCond %{REQUEST_URI} /0-9|[a-z]/$ 
RewriteRule /(0-9|[a-z])/$ /artists_list.php?letter=$1
на url http://localhost/0-9/ выдаёт 404 Not Found. Что неправильно?
 
Начальный слеш убери:
RewriteRule (0-9|[a-z])/$ /artists_list.php?letter=$1

-~{}~ 19.08.05 17:12:

И еще непонятно: зачем RewriteCond если условие в нем идентично правилу в RewriteRule?
 

t3[0one]

Новичок
Код:
RewriteEngine on
Options +FollowSymlinks
RewriteBase /
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule .* - [L]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule .* - [L]
RewriteCond %{REQUEST_FILENAME} !.(css)|(jpg)|(gif)|(png)|(js)$
RewriteRule ^([a-zA-Z0-9]+)[/]?$ /artists_list.php?letter=$1 [L,QSA]
RewriteRule ^([a-zA-Z0-9]+)/([a-zA-Z0-9]+)[/]?$ /artists_list.php?letter=$1&param2=$2 [L,QSA]
и тп

о так попробуй ,что бы сразу избежать дальнейших праблем и вопросов
 

sage

Новичок
Полукондуктор
Хорошо, слеш убрали. Тогда это правило срабатывает на ура. Но... есть второе правило, следущее за тем, что привёл выше:
Код:
RewriteRule (0-9|[a-z])/([^/]+)/$ ./songs_list.php?letter=$1&artist=$2
вводим http://localhost/0-9/artist_name/ На выходе получаем:
songs_list.php?letter=p&artist=artist_name, что неправильно! Если же я ставлю слеш в первом правиле, то второе работает (получаем songs_list.php?letter=0-9&artist=artist_name), а первое - не хочет. Почему так происходит, я не понимаю. А ещё я не могу понять, какую роль играет первый слеш в правилах. Почему ты посоветовал мне убрать именно его?

t3[0one]
спасибо за приведённый код. Во-первых, так никогда не пишут: [/]?. Пиши просто /?. А, во-вторых, не понятно вот это:
Код:
RewriteCond %{REQUEST_FILENAME} !.(css)|(jpg)|(gif)|(png)|(js)$
RewriteRule ^([a-zA-Z0-9]+)[/]?$ /artists_list.php?letter=$1 [L,QSA]
Опять же (css)|(jpg)|(gif)|(png)|(js) - не пишут так! пиши так (css|jpg|gif|png|js). Как, я понимаю, правило
Код:
RewriteRule ^([a-zA-Z0-9]+)[/]?$ /artists_list.php?letter=$1 [L,QSA]
сработает в том случае, если в REQUEST_FILENAME последние два-три символа ни css, ни jpg, ни gif и т.д. Да? А второе правило получается сработает всегда? Всё это не то, не для моего проекта - принцип работы у меня другой. Ещё раз спасибо.
 
В первом правиле ставь в конце строки [L] иначе будет проверять следующее правило даже если первое совпало. В следующем правле точку перед слешом не ставь. Тогда должны работать оба правила нормально.
 

Мутник

Новичок
RewriteCond %{REQUEST_FILENAME} !.(css|jpg|gif|js)$
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^rs/?(.*)/$ rs.php?area=$1 [QSA,L]

почему то все равно применяется правило и к картинкам и к JS и к CSS -> это по логам видно... что то не так?
 
Сверху