Mod_rewrite с несколькими переменными - PullRequest
5 голосов
/ 10 мая 2010

Я использую скрипт PHP, который динамически генерирует прозрачные PNG для использования в качестве фона CSS из строки запроса, которая принимает значения RGBa и HSLa. Оригинальный скрипт можно найти здесь , я только добавил поддержку HSLa.

Поскольку фоновые URL-адреса со строками PHP-запросов не очень приятны, и поскольку они, по-видимому, нарушают прозрачный взлом PNG в IE 6, я подумал об использовании mod_rewrite, чтобы позволить сценарию вызываться при вызове .png с этим синтаксисом. :

/assets/colors/h[0-360 value]_s[0-100 value]_l[0-100 value]_a[0-100 value].png

который будет переписан в:

/assets/colors.php?h=[0-360 value]&s=[0-100 value]&l=[0-100 value]&a=[0-100 value]

Вот проблемы, с которыми я сталкиваюсь:

  • передача нескольких переменных с помощью mod_rewrite
  • с использованием подчеркивания в качестве разделителя

Я знаю, что это можно сделать, передав одну переменную, а затем взорвав ее в скрипте PHP, однако я бы предпочел, чтобы это было сделано Apache.

Заранее спасибо, и если кто-то хочет мою версию скрипта с поддержкой HSLa, просто спросите В любом случае, я рекомендую вам проверить это на сайте автора.

Ответы [ 2 ]

3 голосов
/ 10 мая 2010

mod_rewrite будет сопоставлять вещи в фигурных скобках (), и затем вы можете ссылаться на них как $ 1, $ 2 и т. Д. В порядке их совпадения. Таким образом, вы можете использовать это для извлечения нескольких переменных, просто поместив их в фигурные скобки.

Так что-то вроде этого будет работать для вас,

RewriteRule ^assets/colors/h([0-9]{1,3})_s([0-9]{1,3})_l([0-9]{1,3})_a([0-9]{1,3}).png assets/colors.php?h=$1&s=$2&l=$3&a=$4 

([0-9]{1,3}) будет соответствовать 1, 2 или 3 из чисел 0-9 в строке. Итак, «3», «10» и «100» и т. Д. Но это также будет соответствовать «999», поэтому вам нужно убедиться, что файл colors.php проверяет значения в ожидаемых диапазонах и т. Д.

0 голосов
/ 10 мая 2010

Попробуйте это:

RewriteEngine on
RewriteRule /assets/colors/h([0-9]+)_s([0-9]+)_l([0-9]+)_a([0-9]+).png /assets/col.php?h=$1&s=$2&l=$3&a=$4 [QSA,L]

Мне пришлось изменить имя моего скрипта, чтобы сделать эту работу. Поскольку у меня Options MultiViews, / assets / colors / всегда обрабатывается colors.php независимо от конфигурации mod_rewrite.

...