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ą
RemoveHandlerktóra można sobie spokojnie na DH w.htaccessuż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 :)