Mod_rewrite с несколькими переменными

Я использую Сценарий PHP, который динамично генерирует прозрачный PNGs для использования в качестве фонов CSS от строки запроса, которая берет значения HSLA и RGBa. Исходный сценарий может быть найден здесь, я только добавил поддержку HSLA.

Поскольку фоновые URL со строками запроса PHP не очень симпатичны, и потому что это, кажется, повреждает IE 6 прозрачный взлом PNG, я думал об использовании 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, включил версию сценария, просто спрашивают. Так или иначе я рекомендую проверить его на, он - веб-сайт автора.

5
задан Andrei 10 May 2010 в 18:20
поделиться

2 ответа

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 проверяет значения в пределах ожидаемых диапазонов и т.д.

3
ответ дан 15 December 2019 в 06:19
поделиться

Попробуйте так:

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.

0
ответ дан 15 December 2019 в 06:19
поделиться
Другие вопросы по тегам:

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