mod_rewrite + RewriteRule + errorDocument

Hier bekommst Du deutschsprachigen Support. Keine Fehlermeldungen oder Erweiterungswünsche bitte!
Post Reply
gent
Posts: 163
Joined: Tue 16. Dec 2003, 13:51
Location: Berlin

mod_rewrite + RewriteRule + errorDocument

Post 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?
gent
Posts: 163
Joined: Tue 16. Dec 2003, 13:51
Location: Berlin

Re: mod_rewrite + RewriteRule + errorDocument

Post 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 :)
gent
Posts: 163
Joined: Tue 16. Dec 2003, 13:51
Location: Berlin

Re: mod_rewrite + RewriteRule + errorDocument

Post 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.
User avatar
Heiko H.
Posts: 868
Joined: Thu 27. Oct 2005, 11:41
Location: Dresden
Contact:

Re: mod_rewrite + RewriteRule + errorDocument

Post by Heiko H. »

Hi,
nur'n Denkanstoß - ich fahr gleich los in'n Urlaub... :P
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...
Not longer here - sorry...

Haubner-IT GbR Dresden
gent
Posts: 163
Joined: Tue 16. Dec 2003, 13:51
Location: Berlin

Re: mod_rewrite + RewriteRule + errorDocument

Post 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.
gent
Posts: 163
Joined: Tue 16. Dec 2003, 13:51
Location: Berlin

Re: mod_rewrite + RewriteRule + errorDocument

Post 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 :)
gent
Posts: 163
Joined: Tue 16. Dec 2003, 13:51
Location: Berlin

Re: mod_rewrite + RewriteRule + errorDocument

Post 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 :)
User avatar
update
Moderator
Posts: 6455
Joined: Mon 10. Jan 2005, 17:29
Location: germany / outdoor

Re: mod_rewrite + RewriteRule + errorDocument

Post 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!
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.
Post Reply