mod_rewrite красивые URL не работают
У меня есть следующий URL:
http://example.com/gallery/thumb.php?h=400&w=300&a=c&src=Img_0.jpg
Который я пытаюсь использовать mod_rewrite
сделать "красивым".
Желаемый URL:
http://example.com/h/400/w/300/a/c/src/Img_0.jpg
И мой mod_rewrite
является:
RewriteRule ^h/(*)/w/(*)/a/(*)/src/(*)$ /gallery/thumb.php?h=$1&w=$2&a=$3&src=$4 [L]
Но я получаю 500 Internal Server Error
ошибка, которая говорит мне, что я написал это правило неправильно.
Что я не так написал об этом?
РЕДАКТИРОВАТЬ: не дубликат. Мой вопрос касается конкретного кода, который я пытался написать сам, но мне не удалось написать работающий код.
1 ответ
Это недопустимо в вашем регулярном выражении: (*)
,
*
обозначает повторение предыдущего символа. Поскольку в группе нет персонажа, повторять нечего.
Если вы измените (*)
в (.*)
выражение становится действительным. .
обозначает "каждый символ", так что вы можете ограничить это немного дальше.
Выражение для вашего примера может быть:
RewriteRule ^h/(\d+)/w/(\d+)/a/([a-z]+)/src/(.+)$ /gallery/thumb.php?h=$1&w=$2&a=$3&src=$4 [L]
куда \d
обозначает цифру и [a-z]
любой персонаж в этом диапазоне. Я тоже поменял *
в +
, который соответствует "1 или более символов", а не "0 или более", который будет *
,