• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

Umleitung Includes?

Andrea269

New member
Hallo allerseits,

ich habe folgendes Problem:
Eine php-Datei mit einem include drin.

hallo.php
Da steht drin: blablabla <? include ("hallo.inc"); ?> blablabla

Jetzt möchte ich, dass wenn man die hallo.inc direkt anspricht, sie aber immer nur über hallo.php geöffnet wird und nie alleinstehend.

Kann man da mit php eine Umleitung o.ä. in die inc einbauen, ähnlich wie das bei Frames mit JavaScript möglich ist?

Danke und viele Grüße!
Andrea
 

Weil ich generell meine Seiten immer mit Includes aufbaue, damit wenn ich z.B. eine Änderung am Menü vornehme, nicht jede einzelne html anfassen muss.

Nun habe ich die php-Suche eingebaut von planetsearch. Diese soll nun den gesamten Text-Content durchsuchen. Dieser befindet sich allerdings auch immer in incs. Die Suche findet also ein Wort z.B. aus der content_philosophie.inc und zeigt diese Seite in den Ergebnissen an, so dass man nur direkt die inc aufrufen kann, ohne dass sie - wie eigentlich geplant in der philosophie.php eingebettet wird mit dem ganzen Drumherum.

Nun weiß ich nicht wie ich das Problem lösen soll, ohne dass ich auf die incs verzichten muss :(
 
Wenn du einen Apache hast könntest du mod_rewrite verwenden - ist für solche Geschichten sehr hilfreich.
 
mod_rewrite oder nen apache?
Letzteres würde mich wundern.

Du solltest deine inc-Dateien von der Suche ausschließen. Zusätzlich solltest du den Zugriff über http verbieten. Am einfachsten geht das, in dem du die incs alle in ein Verzeichnis packst und dieses mit .htaccess schützt.

Code:
Order deny,allow
deny from all
Includieren kannst du die dann immer noch, weil php ja nicht über den Webserver darauf zugreift.
Wenn du die nicht in einem Verzeichnis sammeln kannst, müsstest du mit <FilesMatch>-Direktiven arbeiten.
 
Die incs kann ich eben grade nicht ausschließen, weil da ja der zu durchsuchende Content drin steht.

Muss es wohl doch ohne incs im reinen html machen.
Trotzdem danke!
 
vielleicht hilft dir $_SERVER['SCRIPT_NAME'] oder so weiter. Die sollte wenn die inc direkt aufgerufen wird der name der inc sein, wenn includiert jedoch der Name des Scripts welches includiert.

Teste einfach mal var_dump($_SERVER) in der inc und ruf die direkt und übers inluden auf.

Ansonsten andersrum machen. Wenn die incs den Inhalt beinhalten, dann halt nicht diese includieren sondern die Navigation, den header, footer und so.
Damit bekommst du auch schönere Links und deine Seite wird eventuell sicherer, weil du die includes nicht mehr von "Benutzer-Eingaben" abhängig sind.
 
Hallo Andrea,

wie kkapsner richtig sagte, mod_rewrite wäre hier wirklich sehr geeignet. Vielleicht schaust du nochmal nach, ob dein Server wirklich kein mod_rewrite unterstützt - das Modul ist mittlerweile sehr verbreitet und gehört zur Grundausrüstung der meisten Apacheinstallationen.
Du kannst das relativ schnell überprüfen, erstelle einfach eine Datei mit folgendem Inhalt und rufe sie über deinen Browser auf:
Code:
<?php
print_r(apache_get_modules());
?>
(http://de3.php.net/manual/de/function.apache-get-modules.php)
Steht in der Ausgabe etwas von "mod_rewrite" stelle gleich eine Flasche Champagner kalt - das Zeug ist umwerfend: Damit kannst du deine Seite so konfigurieren, dass alle direkten Aufrufe an .inc-Dateien automatisch an deine .php weitergeleitet werden - ohne dass du irgendetwas in diesen Dateien vermerken musst.

Solltest du aber tatsächlich über kein mod_rewrite verfügen, so bleiben dir die hier bereits beschriebenen Methoden als Alternativen. Gängige Praxis in verbreiteter Software (z.B. phpBB-Forum) ist es, zu Beginn deiner home.php eine Konstante zu definieren und in jeder inc-Datei abzufragen, ob diese Konstante definiert wurde. Ist sie nicht definiert, kannst den Fehlaufruf abfangen und weiterleiten/den Benutzer informieren.

home.php (erste Zeilen):
PHP:
<?php
define('VALID_ACCESS', 1);
// ...

home.inc/abc.inc/somewhere.inc/...inc (erste Zeilen):
PHP:
<?php
if (!defined('VALID_ACCESS')) die('Fehlerhafter Aufruf.');
// ...

Noch besser natürlich, wenn du die Prüfung auslagerst - so kannst du den Namen der Konstanten bzw. des Verfahren bei negativer Prüfung ohne grossen Aufwand ändern:

checkAccess.php:
PHP:
<?php
if (!defined('VALID_ACCESS')) die('Fehlerhafter Aufruf.');

home.inc/abc.inc/somewhere.inc/...inc (erste Zeilen):
PHP:
<?php
require('checkAccess.php');
// ...

Grüsse
Dominique
 
Zurück
Oben