2010-05-10 27 views
5

RGBa ve HSLa değerlerini alan bir sorgu dizesinden CSS arka planları olarak kullanmak için dinamik olarak PNG'leri dinamik olarak üreten bir PHP betiği kullanıyorum. Orijinal senaryo here bulunabilir, sadece HSLa desteği ekledim.Çok değişkenli Mod_rewrite

PHP sorgu dizelerine sahip arka plan URL'leri çok güzel olmadığından ve IE 6 saydam PNG kesimini kırdığı için mod_rewrite kullanmanın bu sözdizimine sahip bir .png olduğunda komut dosyasının çağrılmasına izin vereceğini düşündüğümden seslendi: için yeniden olurdu

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

: Burada

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

Ben karşılaşmak ediyorum konular açıklanmıştır:

    Ancak bunu tercih ediyorum,

Bu PHP senaryoya patlayan sonra tek değişken geçirmeden tarafından yapılabilir biliyorum sınırlayıcı olarak çizgi kullanılarak mod_rewrite

  • ile birden çok değişkeni geçen
  • yapılacak Apache tarafından.

    Şimdiden teşekkürler ve eğer herkes HSLa'nın etkinleştirilmiş bir versiyonunu istiyorsa sor. Her neyse, yazarın web sitesinde kontrol etmenizi tavsiye ederim.

  • cevap

    3

    mod_rewrite, parantez() öğesindeki öğelerle eşleşir ve daha sonra bunlara eşleştirildikleri sırayla $ 1, $ 2, vb. Böylece bunları sadece diş tellerinin içine yerleştirerek çok değişkenleri ayıklamak için kullanabilirsiniz.

    Yani böyle bir şey

    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}) üst üste sayılar 0-9 arasında 1, 2 ya da 3 ya maç olacak, sizin için çalışacaktır. Yani "3", "10" ve "100", vb. Ama aynı zamanda "999" ile eşleşir. Bu yüzden, colors.php dosyasının değerlerin beklenen aralıklarda olduğundan emin olmanız gerekir.

    +0

    Teşekkürler! ÇALIŞIYOR bir cazibe gibi. Değişkenlerin doğru aralıkta olduğunu kontrol etmenin gerekliliğini anlıyorum ama betiği kullanıcı girişine göstermediğim için onsuz yapabilirim. – Andrei

    0

    bu deneyin:

    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] 
    

    Bu işi yapmak benim komut dosyası adını Changeup zorunda kaldı. Çünkü Options MultiViews var,/varlıklar/renkler/her zaman mod_rewrite yapılandırmasına bakmaksızın colors.php tarafından işlenir.

    +0

    Teşekkürler ! Neden [QSA] bayrağını kullanmanı öneriyorsunuz? – Andrei

    +0

    QSA, "sorgu dizesi eki" dir, bu nedenle "h100_s100_l100_a100.png? V = 1" gibi ek sorgu dizesi parametrelerinde oluşturmaya karar verirseniz, "v = 1" bölümü, yerleşik sorgu dizesinin geri kalanına eklenir. hedef URL. Genelde onu alışkanlıktan alıyorum. –

    İlgili konular