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
задан 10 October 2016 в 22:26
1 ответ

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

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

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

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

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 или более", что будет * .

3
ответ дан 3 December 2019 в 18:32

Теги

Похожие вопросы