У меня есть следующий 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
, которая говорит мне: « Я написал это правило неправильно.
Что я написал о нем неправильно?
РЕДАКТИРОВАТЬ: Не дубликат. Мой вопрос касается конкретного кода, который я пытался написать сам, но не смог написать рабочий код.
Это недопустимо в вашем регулярном выражении: (*)
.
*
обозначает повторение предыдущего символа. Поскольку в группе нет ни одного символа, повторять нечего.
Если вы измените (*)
на (. *)
, выражение станет действительным. .
обозначает «каждый символ», поэтому вы можете ограничить это немного дальше.
Выражение для вашего примера может быть таким:
RewriteRule ^h/(\d+)/w/(\d+)/a/([a-z]+)/src/(.+)$ /gallery/thumb.php?h=$1&w=$2&a=$3&src=$4 [L]
Где \ d
обозначает цифру, а [az]
любой символ в этом диапазоне. Я также изменил *
на +
, что соответствует "1 или более символов" вместо "0 или более", что будет *
.