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 или более", который будет *,

Другие вопросы по тегам