Назад | Перейти на главную страницу

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 ошибка, которая говорит мне, что я написал это правило неправильно.

Что я не так написал?

РЕДАКТИРОВАТЬ: Не дубликат. Мой вопрос касается конкретного кода, который я пытался написать сам, но не смог написать рабочий код.

Это недопустимо в вашем регулярном выражении: (*).

* обозначает репетиция предыдущего символа. Поскольку в группе нет персонажей, повторять нечего.

Если вы измените (*) к (.*) выражение становится действительным. . обозначает «каждый символ», так что вы можете ограничить это немного дальше.

Выражение для вашего примера может быть:

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