Page 1 of 1
mod_rewrite + RewriteRule + errorDocument
Posted: Fri 10. Sep 2010, 21:42
by gent
hallo,
ich habe in meinem VirtualHost ein eigenes ErrorDocument festgelegt.
<VirtualHost *:80>
ErrorDocument 404
http://foo.bar/404.html
</VirtualHost>
Sobald ich in der .htaccess diese Regel anschalte:
RewriteRule ^(.+)\.phtml$ index.php?$1
...werden von phpwcms alle nicht existierenden Anfragen mit der Endung .phtml beantwortet, und zwar mit dem Fehlertext den ich in der Vorlage festgelegt habe falls ein Artikel fehlt.
bsp:
http://foo.bar/yxz.phtml ... wird von phpwcms beantwortet, obwohl es keinen Alias "yxz" im System gibt.
Dabei ist egal, ob ich in der conf.inc.php das $phpwcms['rewrite_url'] auf 0 oder 1 setze.
Sobald ich ohne .phtml frage, wird das ErrorDocument 404.html wie erwartet ausgegeben.
bsp:
http://foo.bar/yxz ... wird mit meinem 404.html beantwortet
Ich hätte gern das in jedem Fall mein 404.html ausgegeben wird.
Hat jemand einen Tip wie ich das o.g. Verhalten korrigieren kann?
Re: mod_rewrite + RewriteRule + errorDocument
Posted: Fri 10. Sep 2010, 22:10
by gent
nachtrag:
alternativ wär ich auch glücklich, wenn ich im phpwcms ein 404-template anlegen könnte, das mit meinem 404-text bestückt ist.
ich überlege gerade, ob das system mit dem standard-template antwortet?
dann müsste ja auch gehen, ds ich eine 404-vorlage baue, diese vorlage als standard festlege.
.. ich probier das mal

Re: mod_rewrite + RewriteRule + errorDocument
Posted: Fri 10. Sep 2010, 22:36
by gent
das mit der 404-vorlage auf standard gesetzt klappt nicht.
vermutlich wird die vorlage genommen die auf "home" festgelegt wurde, und dann der fehlertext ausgeworfen.
Re: mod_rewrite + RewriteRule + errorDocument
Posted: Fri 10. Sep 2010, 23:07
by Heiko H.
Hi,
nur'n Denkanstoß - ich fahr gleich los in'n Urlaub...
gent wrote:Sobald ich in der .htaccess diese Regel anschalte:
RewriteRule ^(.+)\.phtml$ index.php?$1
...werden von phpwcms alle nicht existierenden Anfragen mit der Endung .phtml beantwortet
Ja klar, die Systeme, phpwcms und dein Webserver, machen genau das was Ihnen "befohlen" wurde.
Dein Webserver soll alle Anfragen nach xyz.phtml in index.php?yxz umschreiben - das macht er brav
und
phpwcms antwortet, da es keinen Alias "yxz" gibt, mit dem eingestellten Fehler"text", denn aufgerufen wird die index.php(die existiert, deshalb kein 404 vom Webserver!).
Die eigentliche Frage ist doch, was hat deine 404.html, was der phpwcms-interne Fehler"text" nicht haben könnte?
z.Bsp. funktioniert der [PHP]-RT da auch, trag doch da einfach mal Folgendes ein:
Code: Select all
[PHP]
Header( "HTTP/1.1 301 Moved Permanently" );
Header( "Location: http://foo.bar/404.html" );
exit;
[/PHP]
Grüße Heiko
P.S.: Antwort von mir in frühestens 2 Wochen...
Re: mod_rewrite + RewriteRule + errorDocument
Posted: Sat 11. Sep 2010, 10:25
by gent
im logfile gibt es einen sauberen 404 eintrag:
Code: Select all
79.xxx.xxx.241 - - [11/Sep/2010:10:08:22 +0200] "GET /yxz.phtml HTTP/1.1" 404 1714 "-" "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_4; de-de) AppleWebKit/533.18.1 (KHTML, like Gecko) Version/5.0.2 Safari/533.18.5"
wenn ich das richtig verstehe verarbeitet phpwcms die fehlende seite korrekt,.. gibt einen 404 als antwort und zeigt eine errorDocument-seite an.
mit dem verhalten kann ich ja grundsätzlich super leben,...
ich hätte nur gerne die vorlage gezielt verändert.
die antwort auf deine frage, was hat mein 404.html , was der interne fehler"text" nicht hat lautet:
zum bsp möchte ich das header-bild (hintergrundbild im kopfbereich, das je nach menu-haupteintrag anders gewählt wurde) auf dieser 404 seite ändern..
ich könnte mir (wenn das mit der vorlage machbar ist) vorstellen meine VirtualHost eintrag auf das vom phpwcms gelieferte ergebnis einzustellen. also sowas wie:
<VirtualHost *:80>
ErrorDocument 404
http://foo.bar/index.php?404
</VirtualHost>
... wenn ich einen alias 404 angelegt habe, der verwendet wird.
dein [PHP]-RT habe ich getestet, funktioniert super,
das system ruft jetzt meine 404.html auf.
Re: mod_rewrite + RewriteRule + errorDocument
Posted: Sat 11. Sep 2010, 10:28
by gent
nachtrag:
wenn ich als fehlertext schreibe..
Code: Select all
[PHP]
Header( "HTTP/1.1 301 Moved Permanently" );
Header( "Location: http://foo.bar/index.php?404" );
exit;
[/PHP]
dann ruft phpwcms mein angelegtes 404-alias auf, mit meiner vorlage
wenn ich in apache nun schreibe:
<VirtualHost *:80>
ErrorDocument 404
http://foo.bar/index.php?404
</VirtualHost>
dann habe ich eine einheitliche 404-seite für alle fälle.
ich glaube mein problem ist damit gelöst, dankeschön für die hilfe

Re: mod_rewrite + RewriteRule + errorDocument
Posted: Sat 11. Sep 2010, 10:47
by gent
noch ein nachtrag:
die behandlung durch eine gezielte 404-seite durch phpwcms lässt jetzt erst viele ideen kommen.
zum bsp kann man auf dieser 404 seite gleich ein such-formular anbieten,
oder die ganze sitemap anzeigen lassen.
für mich ist das jetzt perfekt, gelöst, dankeschön nochmal

Re: mod_rewrite + RewriteRule + errorDocument
Posted: Sat 30. Oct 2010, 12:51
by update
So geht's auch (und meiner Meinung nach optimal):
Code: Select all
<?php
// compare against current domain and redirect to correct if neccessary
if(isset($LEVEL_ID[1])) {
//check active Domains
if($LEVEL_ID[1] == 11 && strpos(PHPWCMS_URL, 'meinetolledomain.tld') === false) {
header( "HTTP/1.1 301 Moved Permanently" );
headerRedirect('http://meinetolledomain.tld/index.php'.returnGlobalGET_QueryString());
}
if($aktion[0] == 0 && !isset($_GET['adclickval'])) {
switch ($_SERVER["SERVER_NAME"]) {
case 'meinetolledomain.tld':
header( "HTTP/1.1 301 Moved Permanently" );
headerRedirect('index.php?aid=1255');
break;
default:header( "HTTP/1.1 301 Moved Permanently" );
headerRedirect('moved.php');
break;
}
}
?>
Das File "moved.php" ist die default-Datei, die dann (gegebenenfalls) serverweit angesprochen werden kann (via .htaccess z.B.).
Die Seite "index.php?aid=1255" liegt irgendwo, idealer Weise im phpwcms-root, jedenfalls an einer Stelle, an der (noch) keine aktiven Links getriggert werden, um den Leuten keine falsche Orientierung zu geben. Sie kann Suchmasken, Links, Content Parts oder was auch immer enthalten (ist ja eine normale phpwcms- Seite).
Der Clou: das Ganze ist auch für multidomain-Umgebungen (Dank an Knut

) tauglich, man kann also jeder domain / Sprache eine eigene pieckfeine Seite basteln.
Ach so: Daraus macht man dann ein frontend-init-Script!