Wyłączenie parsowania PHP przez DAV

Posted on Wed 20 January 2016 in Tips4Unices

Konfiguruję klienta DAV np. Coda2 albo Transmit i gdy pobieram plik do edycji zamiast oryginalnego kodu źródłowego dostaję przeparsowany HTML.

O co chodzi?
Klient DAV wysyła GET i plik PHP jest parsowany, dokładnie tak jak ma to miejsce gdy wywołuje się go z przeglądarki.
Rozwiązanie proponowane przez wielu użytkowników (czyt. wygooglane) ale NIEPRAWIDŁOWE!!!,  wygląda następująco:
należy wyłączyć interpretację PHP dla danego katalogu gdy używany jest WebDAV.
Do /etc/httpd/conf.d/dav.conf (np. w CentOS)
albo
do /etc/httpd/extra/httpd-vhosts.conf (np. w Slackware)
dopisać dla danego katalogu linie:
# Fix for PHP WebDAV
 <IfModule mod_dav.c>
    php_value engine off
</IfModule>

czyli pełna konfiguracja może wyglądać tak:

<Directory "/var/www/htdocs/test">
    Dav On
    # Fix for PHP WebDAV
      <IfModule mod_dav.c>
          php_value engine off
      </IfModule>
</Directory>
Ale to niestety działa tylko w jedną stronę, wprawdzie klient DAV pobierze pliki jak tekstowe, bez ich parsowania ale to samo będzie dotyczyć zapytania z przeglądarki.
Zamiast ładnej strony pokaże się kod źródłowy.

Prawidłowym rozwiązaniem są aliasy, opisane w manualu Apache pod nazwą: Complex Configurations.

Alias "/phparea" "/home/gstein/php_files"
Alias "/php-source" "/home/gstein/php_files"
<Location "/php-source">
    Dav On
    ForceType text/plain
</Location>

W kliencie DAV należy podać jako "Remote Root" nazwę aliasu "php-source" (albo inną, który ustawiliśmy).

Przeglądarka wyśle GET do serwera, a ten przetworzy pliki z aliasu "php-area" zwracając PHP przeparsowany na HTML, natomiast żądanie klienta DAV obsłuży z aliasu "php-source", i wyłączając parsowanie, zwróci czysty kod źródłowy.