Da lighttpd Scripts einbinden kann, habe ich ein php Script geschrieben, welches nach .htaccess Dateien sucht mit folgendem Inhalt:
Code:
order deny,allow
deny from all
Dann wird aus dem Pfad in dem die Datei liegt ein "url.access-deny" generiert.
Diese Methode geht nur wenn php5-cli verfügbar ist und achtet nur auf Dateien, die beim starten des Webservers verfügbar sind.
/etc/lighttpd/scripts/folderwithhtaccess
PHP-Code:
#!/usr/bin/php -dsafe_mode=Off
<?php
$folders = recursive_htaccess_search($argv[1]);
if(is_array($folders)) {
foreach($folders as $folder) {
$file = file_get_contents($folder . ".htaccess");
if(strpos($file, "order deny,allow\ndeny from all") !== false) {
echo "\$HTTP[\"url\"] =~ \"^" . substr(substr($folder, strlen($argv[1])), 0, -1) . "\" { url.access-deny = (\"\") }\n";
}
}
}
function recursive_htaccess_search($path, $file = ".htaccess") {
$return = array();
if(substr($path, -1) != "/") {
$path = $path . "/";
}
if(is_dir($path)) {
$handle = opendir($path);
while(false !== ($subpath = readdir($handle))) {
if(is_dir($path . $subpath) && $subpath != "." && $subpath != "..") {
$return = array_merge($return, recursive_htaccess_search($path . $subpath));
}
}
closedir($handle);
if(is_file($path . $file)) {
$return[] = $path;
}
}
return($return);
}
/etc/lighttpd/includes/cms/contao-rewrite.inc
Code:
server.error-handler-404 = "index.php"
include_shell "scripts/folderwithhtaccess " + var.basepath + "public_html"
url.rewrite-if-not-file = (
".*\.html(.*?)$" => "index.php$1"
)
/etc/lighttpd/sites-available/www.test.com
Code:
$HTTP["host"] =~ "^(www\.|)test\.ch$" {
$HTTP["host"] != "www.test.ch" {
url.redirect = ( "^/(.*)" => "http://www.test.ch/$1" )
}
var.servername = "www.test.ch"
var.basepath = "/var/www/vhosts/www.test.ch/"
include "includes/php.inc"
include "includes/cms/contao-rewrite.inc"
server.name = var.servername
server.document-root = var.basepath + "public_html/"
server.indexfiles = ( "index.php" )
accesslog.filename = var.basepath + "log/access.log"
}
// Die RewriteRule habe ich überarbeitet, die alte war fehlerhaft, löste Fehler bei der internen Suche beim indexieren aus.
Lesezeichen