С моими ограниченными возможностями регулярного выражения и mod_rewrite я пытаюсь переписать определенные запросы изображений, чтобы я мог изменить вывод с помощью php-скрипта.Вот что у меня есть:
RewriteRule ^(public|uploads)/([A-Za-z0-9/_-]+).(JPEG|JPG|GIF|PNG|jpeg|jpg|gif|png)$ public/images.php?%{QUERY_STRING}&src=$1/$2.$3 [L]
# [ 1 ] [ 2 ] [ 3 ]
Это работает, но это слишком жадно и не требует строки запроса, что важно - в противном случае все запросы изображений будут переписаны.Я попытался вставить ?
или ?(.*)
в правило, и я либо получил бы внутреннюю ошибку сервера, либо это, похоже, не решило проблему (скорее всего потому, что я сделал это неправильно).Я также пытался %{QUERY_STRING}
в конце условия, но это, похоже, ни на что не влияло.
Вот что я хочу сделать:
- Любые запросы на
public/
или uploads/
... - За ним следует любой путь к изображению (без учета регистра расширения файла) ...
- За ним следует строка запроса ...
- ... следует переписать в
public/images.php
с исходной строкой запроса и добавить один дополнительный параметр: src
, который содержит фактический путь к изображению (переписанная часть). - Extra-nice ", но не обязательно: ограничьте правило только переписыванием URL, если строка запроса содержит хотя бы один элемент из набора параметров.Например, только если присутствует один из параметров
width=
, height=
или contrast=
.Если это делает вещи раздутыми или усложненными, меня это не беспокоит.
Так, например, запрос на:
uploads/images/my_folder/test.jpg?width=320&height=220
Должен обслуживаться:
public/images.php?width=320&height=220&src=public/images/my_folder/test.jpg
Файл .htaccess
находится в моем корневом каталоге, а также в каталогах public
и uploads
.
Я хочу избежать абсолютных URL-адресов, потому что я хочу, чтобы это было переносимымбез необходимости редактирования.Я много гуглял и читал соответствующие посты SO, и до сих пор не могу понять это.Как я могу исправить это правило, чтобы делать то, что я хочу, или есть лучший способ написать это вообще?
Редактировать : Просто хочу заметить, что это правило работало для меня ранее:
RewriteRule ^(public|uploads)/([A-Za-z0-9/_-]+).(JPEG|JPG|GIF|PNG|jpeg|jpg|gif|png)/([0-9]+)$ public/images.php?width=$4&src=$1/$2.$3
... но только для запросов типа uploads/my_folder/image.jpg/280
- я использовал 280 в качестве ширины, но теперь я хочу принимать комбинации нескольких параметров в произвольном порядке: