Apache, CGI a DocumentRoot-ban

Üdv!

Windowson frissítettem a ma kijött php 5.3.0-ra, és azt tapasztaltam, hogy az installerben* nincs modul apache-hoz. Ezért úgy döntöttem, bekonfigurálom a php-t cgi-nek, nem lehet ez olyan nehéz. Nagy nehezen sikerült eljutni addig, hogy a ScriptAlias-szal beállított pathon elhelyezett php fileokat átadja az apache a php-nak. Azonban azt már sehogy nem sikerül elérnem, hogy a DocumentRoot-on elhelyezett php-k is lefussanak. Röviden tehát ez lenne a probléma.

*: a zipben valószínűleg van. De most már sokkal inkább azért teszem fel a kérdést, mert a probléma elvi megoldása érdekel. Vonatkoztassunk el a php-től.

Mindez config-ban:

Maga a cgi beállítása a következő módon történt:

Először beállítottam egy ScriptAlias-t:


<IfModule alias_module>
    ScriptAlias /cgi-php/ "D:/Program Files/PHP/"
</IfModule>

Majd a D:/Program Files/PHP jogosultságait:


<Directory "D:/Program Files/PHP">
    AllowOverride None
    Options None
    Order allow,deny
    Allow from all
</Directory>

Ezután hozzárendeltem a php kiterjesztést egy "változóhoz":


<IfModule mime_module>
#itt van meg 2 beállítás, ezeket nem másolom be, nem releváns
    AddHandler php-cgi .php
</IfModule>

Majd a változóhoz hozzárendeltem egy Action-t, hogy hívja meg a php-cgi.exe-t:


Action php-cgi "/cgi-php/php-cgi.exe"

Eddig rendben is van, a D:\Program Files\PHP alá helyezett .php fileok a http://localhost/cgi-php/*.php módon meghívva szépen le is futnak.

Most jött az, hogy más könyvtár alól is meg akarok hívni .php fileokat, konkrétan a DocumentRoot alól:


DocumentRoot "E:/localhost"
<Directory "E:/localhost">
    Options Indexes FollowSymLinks +ExecCGI
    AllowOverride None
    Order allow,deny
    Allow from all
    AddHandler php-cgi .php
</Directory>

Ami ebből érdekes, az a +ExecCGI és az AddHandler php-cgi .php. A php-cgi változót használtam a D:/Program Files/PHP esetében is, ezért a logikám azt diktálja, hogy ugyan úgy meg fog hívódni a fenti Action. Az aliasnak pedig _szerintem_ ugyan úgy ki kellene értékelődnie ebben az esetben is. De nem így történeik. Ha viszont az Action sorban a php-cgi.exe-t abszolút url-lel adom meg, akkor nem működik egyáltalán.

Tehát a kérdés az, hogy mit kellene beállítanom, hogy a DocumentRoot-ban elhelyezett .php-k is átadódjanak a php-cgi.exe-nek?
(Egy apró kikötés van: nem szeretnék a php scriptek elejére shebangot rakni.)

Hozzászólások

Most már tényleg semmit nem értek, kicsit belepiszkáltam a beállításokba, és most működik.

Először kiszedtem az E:/localhost rész alól a +ExecCGI és AddHandler php-cgi .php sorokat. Majd a /cgi-php/-eket /-ekre cseréltem, megnéztem, hogy így is működik-e aminek ebben az esetben működnie kell. Miután megállapítottam, hogy igen, visszaírtam a /-eket /cgi-php/-ekre, és most érdekes módon a DocumentRoot alatti scriptek is szépen lefutnak. Miközben nincs +ExecCGI. Nem tudom, hogy ez hogy működhet, de egyelőre nem fogok hozzányúlni, az biztos. :)