hevo
13.02.10, 15:10
Hallo Loswebos-Gemeinde!
Folgende Sache: Seit Jahren (genauer 2003) werkelt auf einer Website auf Campari eine Art "Mini-Doit-Yourself-CMS". Nach Außen sieht die Website stinknormal nach HTML aus, im Hintergrund geht aber jeder Aufruf einer HTML-Seite in ein PHP-Script, vorgefertigte Seiten werden von der Festplatte ausgeliefert und es werden sogar die richtigen Statuscodes gesendet bzw. der Inhalt komprimiert, falls ein Browser das möchte.
Wenn ich an einer Seite etwas ändern oder eine neue Seite anlegen will, mache ich das nur in einer "Zwischendatei", die nur den eigentlichen Content dieser Seite enthält. Um die Seiten-Header und Footer, Keywords und die interne Verlinkung, muß ich mich dabei nicht kümmern. Wenn ich meinetwegen an "test.html" bastle und mir eine Vorschau ansehen will, rufe ich die Seite mit
test.html?new=1
auf. Alle anderen sehen die alte Version von der Festplatte. Erst wenn ich die geänderete Seite freigebe, wird sie beim ersten Aufruf generiert und auf der Festplatte gespeichert.
Das Problem ist nun, daß diese ?new=1 Nummer nicht mehr funktioniert!
Ich habe das Skript mal "ausgeschlachtet", damit das Problem deutlich wird. Normalerweise steht die .htaccess Datei bzw. catcher.php natürlich in Doc-Root, hier zum nachmachen (testen) in /html/test/
.htaccess
----------8<----------
Options +SymLinksIfOwnerMatch
php_value register_globals 0
AddHandler CatchHTML html
Action CatchHTML catcher.php
ErrorDocument 404 /test/catcher.php
DirectoryIndex catcher.php
---------->8----------
Wir leiten alle Anfragen eines HTML-Dokuments in diesem Verzeichnis also nach "catcher.php" um - und natürlich auch das ErrorDocument, denn in dem Verzeichnis gibt es ja keine HTML-Dateien. Das Skript kann nun nach herzenslust schalten und walten.
catcher.php
----------8<----------
<?php
function GetCMD() {
if (isset($_GET["new"]))
return true;
return false;
}
/**********************************************
Script - Entry
***********************************************/
header ("Status: 200 OK", true, 200);
header ("Content-Type: text/html");
$IsNew = GetCMD();
?>
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<HTML>
<HEAD>
<TITLE>Get-Test</TITLE>
</HEAD>
<BODY>
<H1>Willkommen auf...</H1>
<P>... <?php echo $_SERVER["REQUEST_URI"];?>!</P>
<?php
if ($IsNew) {
?>
<P>Get-Variable new ist gesetzt!</P>
<?php
} // end of If IsNew
?>
</BODY></HTML>
---------->8----------
Im Prinzip kann man nun "/test/hans_wurst.html" oder "/test/sonstwas.html" eingeben, man landet immer in diesem Skript. Aber was ist mit der Get-Variablen los, wenn man
/test/hans_wurst.html?new=1
/test/sonstwas.html?new=1
eingibt? Sie ist nicht gesetzt, obwohl sie in $_SERVER["REQUEST_URI"] zu sehen ist...
Meinungen?
bfn hevo
Folgende Sache: Seit Jahren (genauer 2003) werkelt auf einer Website auf Campari eine Art "Mini-Doit-Yourself-CMS". Nach Außen sieht die Website stinknormal nach HTML aus, im Hintergrund geht aber jeder Aufruf einer HTML-Seite in ein PHP-Script, vorgefertigte Seiten werden von der Festplatte ausgeliefert und es werden sogar die richtigen Statuscodes gesendet bzw. der Inhalt komprimiert, falls ein Browser das möchte.
Wenn ich an einer Seite etwas ändern oder eine neue Seite anlegen will, mache ich das nur in einer "Zwischendatei", die nur den eigentlichen Content dieser Seite enthält. Um die Seiten-Header und Footer, Keywords und die interne Verlinkung, muß ich mich dabei nicht kümmern. Wenn ich meinetwegen an "test.html" bastle und mir eine Vorschau ansehen will, rufe ich die Seite mit
test.html?new=1
auf. Alle anderen sehen die alte Version von der Festplatte. Erst wenn ich die geänderete Seite freigebe, wird sie beim ersten Aufruf generiert und auf der Festplatte gespeichert.
Das Problem ist nun, daß diese ?new=1 Nummer nicht mehr funktioniert!
Ich habe das Skript mal "ausgeschlachtet", damit das Problem deutlich wird. Normalerweise steht die .htaccess Datei bzw. catcher.php natürlich in Doc-Root, hier zum nachmachen (testen) in /html/test/
.htaccess
----------8<----------
Options +SymLinksIfOwnerMatch
php_value register_globals 0
AddHandler CatchHTML html
Action CatchHTML catcher.php
ErrorDocument 404 /test/catcher.php
DirectoryIndex catcher.php
---------->8----------
Wir leiten alle Anfragen eines HTML-Dokuments in diesem Verzeichnis also nach "catcher.php" um - und natürlich auch das ErrorDocument, denn in dem Verzeichnis gibt es ja keine HTML-Dateien. Das Skript kann nun nach herzenslust schalten und walten.
catcher.php
----------8<----------
<?php
function GetCMD() {
if (isset($_GET["new"]))
return true;
return false;
}
/**********************************************
Script - Entry
***********************************************/
header ("Status: 200 OK", true, 200);
header ("Content-Type: text/html");
$IsNew = GetCMD();
?>
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<HTML>
<HEAD>
<TITLE>Get-Test</TITLE>
</HEAD>
<BODY>
<H1>Willkommen auf...</H1>
<P>... <?php echo $_SERVER["REQUEST_URI"];?>!</P>
<?php
if ($IsNew) {
?>
<P>Get-Variable new ist gesetzt!</P>
<?php
} // end of If IsNew
?>
</BODY></HTML>
---------->8----------
Im Prinzip kann man nun "/test/hans_wurst.html" oder "/test/sonstwas.html" eingeben, man landet immer in diesem Skript. Aber was ist mit der Get-Variablen los, wenn man
/test/hans_wurst.html?new=1
/test/sonstwas.html?new=1
eingibt? Sie ist nicht gesetzt, obwohl sie in $_SERVER["REQUEST_URI"] zu sehen ist...
Meinungen?
bfn hevo