2010-05-10 45 views
5

我正在使用一个PHP脚本,该脚本可以动态生成透明的PNG,作为使用RGBa和HSLa值的查询字符串作为CSS背景使用。原始脚本可以找到here,我只添加了HSLa支持。具有多个变量的Mod_rewrite

因为带有PHP查询字符串的背景URL并不是很漂亮,并且因为它似乎破坏了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] 

这是我现在遇到的问题:

  • 使用下划线作为分隔符

我知道这可能通过传递一个变量,然后在PHP脚本爆炸不能做到,但是我宁愿把它传递多个变量与mod_rewrite的

  • 做由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})将匹配一排数字0-9的是1,2或3。所以“3”,“10”和“100”等,但它也会匹配“999”,所以你需要确保colors.php文件检查值是否在预期的范围内,等等。

    +0

    谢谢!奇迹般有效。我知道需要检查变量是否在正确的范围内,但由于我没有将脚本公开给用户输入,所以我可以在没有该功能的情况下执行此操作。 – Andrei 2010-05-10 19:51:52

    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] 
    

    我不得不变速球我的脚本名称,使这项工作。因为我有Options MultiViews,无论mod_rewrite配置如何,/ assets/colors /总是由colors.php处理。

    +0

    谢谢 !你为什么建议使用[QSA]标志? – Andrei 2010-05-11 17:58:03

    +0

    QSA是“查询字符串追加”,因此如果您决定构建像'h100_s100_l100_a100.png?v = 1'这样的附加查询字符串参数,则'v = 1'部分将被追加到内置查询字符串的其余部分目标网址。我通常将它添加出习惯。 – 2010-05-11 23:29:03