2010-05-10 42 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