Onko mahdollista soittaa AddHandlerille ehdollisesti Apache (2.x) -kohdan .htaccessissa?

Nykyinen tilanteeni edellyttää, että yksi tuotantopalvelin tarvitsee tietyn AddHandlerin, mutta yksi rikkoo kehityspalvelimen. Tämä edellyttää, että sinulla on 2 versiota .htaccessista, mikä on tuskaa. Joten haluaisin sen sijaan kääri yhden AddHandlerin ehdolliseen. Jotain tällaista:

IF IP=='1.2.3.4' THEN AddHandler type/foo .ext ENDIF 

Ongelma on uusi, mutta toistaiseksi hallitsematon. Tiedän, että tämä ei ole läheskään ihanteellinen, ja palvelimilla oli tapana sovittaa 100% kuten pitäisi, mutta väliaikaisesti ne eivät voi.

Käytä mod_rewrite ja H = lippua. Käytä .htaccessissa a - korvauksena, jos asetat H = lippuun. Sen jälkeen voit tehdä IP-tarkastuksesi RewriteCond-tiedostossa.

Tässä on joitain (testaamattomia!) Koodeja tämän saavuttamiseksi:

# Standard preamble for using mod_rewrite in a root .htaccess file: RewriteEngine On RewriteBase / Options +FollowSymLinks # Handle .ext files as type/foo if the server address is 1.2.3.4: RewriteCond %{SERVER_ADDR} =1.2.3.4 RewriteCond %{SCRIPT_FILENAME} \.ext$ RewriteRule ^ - [H=type/foo] 
  • +1, erinomainen ehdotus. Muokkasin vastaustasi lisätäksesi koodiesimerkin. En kuitenkaan testannut sitä, joten kaikki virheet pitäisi syyttää minua.

Valitettavasti Apachella on hyvin rajoitettu tuki ehdollisille kokoonpanoille. Lukuun ottamatta tiettyjä moduuleja, joilla on ehdollisia arviointeja sisäisesti, kuten mod_rewrite, olet vain , , ja uskon, että on olemassa myös tapa sallia direktiivit tiedoston tai hakemiston olemassaolon perusteella.

IfDefine antaa sinun sallia kokoonpanot muuttujien perusteella, jotka määritetään käynnistyksen aikana -D, esim.

httpd -Dstaging 

Tai voit käyttää Define:

Define staging staging 

Valitettavasti, IfDefine vain arvioi, onko muuttuja määritelty, ei sen arvoa. Vaikka et voi todellakaan määritellä sitä ehdollisesti kokoonpanoissasi, niin se ei ole paljon menetystä.

Joten jos sinulla on eri moduulit käytössä tuotanto- ja lavoituspalvelimissasi tai jos aloitat vaiheistamispalvelimesi mukautetulla määritysmuuttujalla, se olisi ratkaisusi.

Muussa tapauksessa meidän on odotettava päivää, jolloin joku luo mod_if: n, jonka avulla voimme tehdä:

DefineIf Server_Addr '127\.0\.0\.1' env=staging:production  AddHandler foo-handler .foo  

työskennellyt sinulle: Charles Robertson | Haluatko yhteyttä?