htaccess verhindert direkten Dateiaufruf

julia29

Erfahrenes Mitglied
Hallo,

da htaccess-Einstellung den direkten Datei-Aufruf in einem Unterverzeichnis nicht erlaubt
wollte ich aus root mittels Script die Datei erreichen.
PHP:
<?php
header('Location: /verzeichnis1/script1.php');
?>

Nun kommt die Fehlermeldung

HTML:
headers already sent by ....

Kann ich dies mit ob_start() verhindern? Wie müßte ich das schreiben?

Oder gibt es noch eine andere Möglichkeit?
Es werden aus script1.php heraus noch mehrere Dateien aus diesem Verzeichnis aufgerufen,
sonst hätte ich diese php einfach ins root verschoben, geht nun aber leider nicht.
Wie könnte man dies lösen?

Gruß
Julia
 
[thread=302188]Häufig auftretende Fehler[/thread]

vielen Dank Gumbo,

ich habe es jetzt so versucht
PHP:
<?php 
ob_start(); 
header('Location: /verzeichnis1/test.html'); 
ob_end_clean(); 
?>

Fehlermeldung ist weg, aber Script wird nicht ausgeführt, zumindest bleibt die Seite leer bzw. der Inhalt wird nicht dargestellt.
Was mache ich falsch?
 
Die ob_start()-Funktion muss vor jeglicher Ausgabe aufgerufen werden. Notier sie deshalb am Anfang des gesamten Skriptes. Weiterhin sollte das Skript nach der Weiterleitung abgebrochen werden, um eine weitere Verarbeitung zu unterbinden. Außerdem muss eine absolute URL als Weiterleitungsadresse angegeben werden. Also (schematisch):
PHP:
<?php

	ob_start();

	// …

	if( true ) {
		header('Location: http://example/verzeichnis1/test.html');
		exit;
	}

	// …
 
Vielen Dank Gumbo,

aber mit dem Vorschlag kommt nun wieder die Fehlermeldung

HTML:
headers already sent by ....

Ich werde es nun mal mit einer htaccess nur für dieses Verzeichnis versuchen die Einstellungen aufzuheben, vielleicht habe ich da mehr Glück mit.

Danke für Deine Hilfe
Gruß
julia
 
Mit der Funktion [phpf]headers_sent[/phpf] kannst du zwei Variablen referenzieren, in welche (sofern die Headers bereits gesendet wurden) der entsprechende Dateipfad und die Zeilennummer geschrieben werden. So kannst du leicht herausfinden, wo nun eigentlich die erste Ausgabe erfolgt.

PHP:
if ( headers_sent( $path, $line ) ) {
    echo "Headers wurden gesendet beim Ausführen von {$path} in Zeile {$line}";
} else {
    header( 'Location: /verzeichnis1/test.html' ); exit;
}
 
Zurück