Pomocny .htaccess

tech • 311 słów • 2 minuty czytania

Dzięki Ci Panie za .htaccess, który w wielu przypadkach ratuje nas z opresji ;)

Czasem, gdy serwer w konfiguracji nie ma zdefiniowanych odpowiednich mime-type dla standardowych rodzajów plików, mogą pojawić się różne nieprzewidziane sytuacje. W większości wypadków ratuje dodanie odpowiedniego wpisu do pliku .htaccess, ale czasami różnie to bywa.

Na dreamhoscie dziwnym trafem wiele typowo standardowych plików nie ma ustawionego pożądanego typu, chociażby dla phps, czy xhtml. I z tego powodu natknąłem się na problem - plik index.xhtml nie był uznawany za domyślną stronę i serwer listował zawartość katalogu. Oczywiście dodanie odpowiedniego wpisu do .htaccess:

DirectoryIndex index.xhtml

rozwiązało sprawę z listowaniem, ale wtedy jeszcze inne niespodzianki dały o sobie znać. Problemy te nie występowały na serwerze z ustawionym domyślnie mime-type dla XHTML i dodanym index.xhtml jako jeden z domyślnych plików.

Dziś miałem kolejny problem. Wrzuciłem sobie na serwer skrypty w Perlu, aby każdy mógł je sobie pobrać. W tym celu, żeby wszystko było ok, dorzuciłem do .htaccess poniższą linijkę:

AddType text/plain pl

I nic z tego nie wyszło! Serwer próbuje interpretować pliki, skrypty lub coś innego z nimi zrobić, w wyniku czego wypluwa błędem 500 - Internal Server Error. Trochę mnie to zdenerwowało…

Szybkie i proste rozwiązanie to skorzystanie z mod_rewrite i PHP.

Do .htaccess dorzucam regułki:

RewriteEngine on
RewriteRule (.*\.pl)$ .pl.php?f=$1

Plik .pl.php zawiera kod:

<?php

$filename = str_replace ('../', '', (string)$_GET['f']);

if (is_readable($filename)) {
	header('Content-Type: text/plain; charset=utf-8');
	readfile($filename);
} else {
	header('HTTP/1.0 404 Not Found');
	echo '<h1>Not Found</h1>';
}

?>

I działa jak powinno ;)

Plik skryptu w nazwie posiada “.” na początku, aby nie był przypadkiem dostępny i wyświetlany przy listowaniu katalogu przez Apache’a, ale to pewnie wszyscy wiedzą.

Wyświetlaną treść strony w przypadku nie znalezienia pliku lub problemu z jego odczytem można sobie zmienić na taką, jaka generowana jest przez serwer. Wtedy z zewnątrz nie będzie można zauważyć działania skryptu. Wszystko będzie wyglądało, jakby było prawdziwe :P

Komentarze (2)

MySZ avatar
MySZ
20070822-214818-mysz

Proponowałbym zapoznanie się z dyrektywą RemoveHandler która można sobie spokojnie na DH w .htaccess użyć ;) ułatwia życie…

MalCom avatar
MalCom
20070823-005731-malcom

Tego nie znałem. Człowiek ciągle uczy się nowych rzeczy ;)

Rzeczywiście ładnie działa, dzięki za pomoc :)

Dodaj komentarz

/dozwolony markdown/

/nie zostanie opublikowany/