2010-05-10 4 views
5

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

Поскольку фоновые 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 просто спросила. В любом случае, я рекомендую вам проверить это на сайте автора.

ответ

3

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

Спасибо! Работает как шарм. Я понимаю, что нужно проверить, что переменные находятся в правильном диапазоне, но поскольку я не подвергаю скрипт пользовательскому вводу, я могу обойтись без этого. – Andrei

0

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

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] 

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

+0

Благодаря ! Почему вы предлагаете использовать флаг [QSA]? – Andrei

+0

QSA - это «строка запроса», поэтому, если вы решили построить дополнительные параметры строки запроса, такие как 'h100_s100_l100_a100.png? V = 1', часть' v = 1' будет добавлена ​​к остальной строке запроса, встроенной в целевой URL. Я обычно добавляю это по привычке. –

Смежные вопросы