Http Ana Bilgisayarına dayalı bir değişken ayarlamak için SetEnvIf'i nasıl kullanabilirim?


11

Apache'de bir değişken ayarlamaya çalışıyorum

Http ana bilgisayarı dev URL ise ENV = DEV

veya

Http ana bilgisayar prd URL'siyse ENV = PRD

ve ardından bazı mantık dalları oluşturmak için $ _SERVER ['ENV'] kullanın

Şimdiye kadar bunların hiçbiri benim için çalışmadı ve setenvif modülümüz kurulu

SetEnvIfNoCase Referer
SetEnvIfNoCase Remote_Host

Bunu yapmanın doğru yolu nedir?

Yanıtlar:


15

Belgelere hızlı bir bakış :

SetEnvIf yönergesi, isteğin özniteliklerine dayalı olarak ortam değişkenlerini tanımlar. İlk argümanda belirtilen özellik üç şeyden biri olabilir:

Bir HTTP istek başlığı alanı (bunlar hakkında daha fazla bilgi için bkz. RFC2616); örneğin: Ana Bilgisayar, Kullanıcı Aracısı, Yönlendiren ve Kabul Etme Dili. Bir grup istek üstbilgisi belirtmek için normal bir ifade kullanılabilir.

Dolayısıyla, bir ortam değişkenini Hostbaşlık üzerinde koşullu yapmak kesinlikle mümkündür . Görünüşe göre, Refererya Remote_Hosttam olarak ne istediğinizi veya başlıkları kullanmaya çalışıyorsunuz (teoride çoğu durumda başlığın Refererdeğerini içermelidir Host). istekte Remote_Hostbulunan istemcinin ana bilgisayar adı olurdu , bu da istediğiniz gibi değildir (ve çoğu yapılandırmada yalnızca DNS aramalarının performans nedenleriyle kapatılması normaldir).

Bunun gibi bir şey deneyin:

SetEnvIf Host "www-dev\.example\.com" ENV=DEV
SetEnvIf Host "www-production\.example\.com" ENV=PRD

... ve ardından bazı mantık dalları oluşturmak için $ _SERVER ['ENV'] kullanın

Ancak Host, bu chicanery'den geçmeden doğrudan PHP'de başlığın değerine başvurabileceğinizi de unutmayın ; $_SERVER['HTTP_HOST']tam olarak istediğiniz şeye sahip olacak.


Güzel. Bu, bazı Ana Bilgisayarlara bağlanırken parola gerektirecek özel kurallar yazmama izin veriyor, ancak diğerlerini değil (yani, bir VM birden çok Amazon EC2 örneğine klonlandığında, ancak özel Şef tarifleri yazarken hazırlama kutusunu koruyun). Araması zorsa işlevsellik çok faydalıdır.
Eric L.

1
SetEnvIfDocs 3 param alan adı noktalar yerde ters eğik çizgi olmamalıdır regex olduğunu söylemek? Ya da değeri çift tırnak işaretleri arasına almak Apache değerini dizgi değişmezi olarak ele alıyor mu?
jakub.g

@ jakub.g Evet, normal ifade ve kaçmaları gerekiyor. Bu durumda, bir nokta herhangi bir tek karakterle eşleştiğinden, "www-dev.example.com"normal ifade gibi beklenmedik Ana Makine Adlarıyla da eşleşir www-dev-example.com. Beklenen maçları ve daha fazlasını alırsınız. Örneği şimdi güncelledim.
Martijn Heemels
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.