mod_rewrite + RewriteRule + errorDocument
mod_rewrite + RewriteRule + errorDocument
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?
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
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
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
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.
vermutlich wird die vorlage genommen die auf "home" festgelegt wurde, und dann der fehlertext ausgeworfen.
Re: mod_rewrite + RewriteRule + errorDocument
Hi,
nur'n Denkanstoß - ich fahr gleich los in'n Urlaub...
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:
Grüße Heiko
P.S.: Antwort von mir in frühestens 2 Wochen...
nur'n Denkanstoß - ich fahr gleich los in'n Urlaub...
Ja klar, die Systeme, phpwcms und dein Webserver, machen genau das was Ihnen "befohlen" wurde.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
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]
P.S.: Antwort von mir in frühestens 2 Wochen...
Re: mod_rewrite + RewriteRule + errorDocument
im logfile gibt es einen sauberen 404 eintrag:
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.
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"
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
nachtrag:
wenn ich als fehlertext schreibe..
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
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]
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
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
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
So geht's auch (und meiner Meinung nach optimal):
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!
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;
}
}
?>
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!
It's mostly all about maintaining two or three customer's sites Still supporter for the band Mykket Morton. Visit Mykket Morton on FB. Listen Mykket Morton and live videos on youtube.
Now building a venue for young artists to get wet on stage, rehearsal rooms, a studio, a guitar shop - yes I'm going to build some guitars.
Now building a venue for young artists to get wet on stage, rehearsal rooms, a studio, a guitar shop - yes I'm going to build some guitars.