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)
Proponowałbym zapoznanie się z dyrektywą
RemoveHandler
która można sobie spokojnie na DH w.htaccess
użyć ;) ułatwia życie…Tego nie znałem. Człowiek ciągle uczy się nowych rzeczy ;)
Rzeczywiście ładnie działa, dzięki za pomoc :)