#regex #.htaccess #mod-rewrite #url-rewriting
#регулярное выражение #.htaccess #мод-перезапись #url-переписывание
Вопрос:
У меня есть галерея изображений с более чем 3 тысячами изображений, и она продолжает расти. Мой URL-адрес для доступа к изображению следующий:
1.
http://example.com/gallery/image/cloud-blue-plane-hawaii-428459
or
2.
http://example.com/gallery/image/428459
Скрипт PHP находится здесь:
http://example.com/gallery/image.php?image=428459
Итак, мне нужно написать RewriteRule для доступа к нему.
Я считаю, что правильное правило для второго url ( http://example.com/gallery/image/428459
) выглядит следующим образом:
RewriteRule ^gallery/image/(d |[^/] )/?$ gallery/image.php?image=$1 [L]
Я в некотором роде готов, когда пришло время написать правило для первого URL ( http://example.com/gallery/image/cloud-blue-plane-hawaii-428459
)… Я понятия не имею…
Есть ли способ создать одно правило для обоих URL-адресов?
Комментарии:
1. Не используйте
or
, чтобы сделать начальную часть необязательной. Я думаюgallery/image/D*(d )/?$
, это для вас.2. Это решение почти работает. Если в строке есть цифра, она завершается ошибкой:
http://example.com/gallery/image/cloud-blue-plane-99-hawaii-428459
Ответ №1:
Используйте
^gallery/image/[^/]*?([0-9] )/?$
Смотрите доказательство.
Объяснение
--------------------------------------------------------------------------------
^ the beginning of the string
--------------------------------------------------------------------------------
gallery/image/ 'gallery/image/'
--------------------------------------------------------------------------------
[^/]*? any character except: '/' (0 or more times
(matching the least amount possible))
--------------------------------------------------------------------------------
( group and capture to 1:
--------------------------------------------------------------------------------
[0-9] digits (0-9) (1 or more times (matching
the most amount possible))
--------------------------------------------------------------------------------
) end of 1
--------------------------------------------------------------------------------
/? '/' (optional (matching the most amount
possible))
--------------------------------------------------------------------------------
$ before an optional n, and the end of the
string