Я немного борюсь с mod_rewrite и заменяю несколько переменных регулярными выражениями. Пытаюсь переписать следующее:
www.mysite.com/avatars/funny/1
в:
www.mysite.com/avatars.php?genre=funny&page=1
Прямо сейчас у меня есть следующее, что на самом деле не помогает:
RewriteRule ^/avatars/?(.*)/?(.*)$ /avatars.php?genre=$1&page=$2
В *
оператор жадный. Это означает, что он схватит столько, сколько сможет.
В вашем примере первый (.*)
блок будет соответствовать /funny/1
. Второй вообще ничего не будет соответствовать, но это нормально, потому что *
соответствует "нулю или более" предыдущего символа.
Использование другого блока для сопоставления частей между косыми чертами сделает свое дело. Что-то вроде этого:
RewriteRule ^/avatars/([a-z]*)/([0-9]*)$ /avatars.php?genre=$1&page=$2
или это:
RewriteRule ^/avatars/([^/]+)/([^/]+)$ /avatars.php?genre=$1&page=$2
Также нет необходимости в ?
после косой черты, так как для того, чтобы было две переменные, косая черта должна быть там.
Apache также имеет неохотно операторы, противоположные жадным операторам. Вы можете использовать их, добавив вопросительный знак после обычно жадного оператора. Как это:
RewriteRule ^/avatars/(.*?)/(.*?)$ /avatars.php?genre=$1&page=$2
Я думаю, что вы используете /? проблема, попробуйте следующее:
RewriteEngine on
RewriteRule ^avatars/([^/]+)/([^/]+)$ avatars.php?genre=$1&page=$2 [L]
Вам не нужен ?
поскольку косые черты не являются обязательными. Однако вам, вероятно, придется остановить обработку после применения этого правила ([L]). Вы можете попробовать следующее?
RewriteRule ^/avatars/(.*)/(.*)$ /avatars.php?genre=$1&page=$2 [L]