Gå til innhold

[Løst] ErrorDocument 404 ved bruk av flere VirtualHost's


Anbefalte innlegg

Hei,

Først; litt usikker på om dette er seksjonen å poste slikt i, da det ikke er PHP-programmering. Allikevel er det vel denne seksjonen hvor Apache er mest relevant.

 

Har problemer med å få ErrorDocument til å fungere forskjellig på forskjellige VirtualHosts. Har snakket litt med noen folk på IRC og kan virke som om Apache blander sammen erroren 404 pga. den er global ble det sagt(?).

F. eks så prøver den å laste 404.html, selv om jeg har satt den som en helt annen fil i VirtualHosten som er brukt der og da.

 

Det er hovedsaklig på www.minside.no som det er viktig at jeg får det til å fungere, da dette er en bedriftsside.

 

Skissering av hvordan httd.conf'en min ser ut:

 

# www.example.com
<VirtualHost ip:80>
   ServerName www.example.com
   DocumentRoot /var/www/
   ErrorDocument 404 /404.html
   ErrorLog /var/log/apache2/error.log
</VirtualHost>

# www.foo.com
<VirtualHost ip:80>
   ServerName www.foo.com
   DocumentRoot /var/www/foo
   ErrorDocument 404 /404.html
   ErrorLog /var/log/apache2/error.log
</VirtualHost>

# www.minside.no
<VirtualHost ip:80>
   ServerName www.minside.no
   DocumentRoot /var/www/minside
   ErrorDocument 404 /index.php?p=404
   ErrorLog /var/log/apache2/error.log
</VirtualHost>

 

Og her er hva error-loggen sier om jeg går inn på www.minside.no/asdf. Merk at dette er for en request, selv om det er flere 404.html som lastes. Jeg bruker dessuten favicon.png, ikke .ico på alle sidene mine, så vet ikke helt hvor den kommer fra. Kanskje Chromium som prøver å laste ved standard 404-error.

 

[sun Nov 13 04:13:40 2011] [error] [client <ip>] File does not exist: /var/www/minside/asdf
[sun Nov 13 04:13:40 2011] [error] [client <ip>] File does not exist: /var/www/minside/404.html
[sun Nov 13 04:13:40 2011] [error] [client <ip>] File does not exist: /var/www/minside/favicon.ico
[sun Nov 13 04:13:40 2011] [error] [client <ip>] File does not exist: /var/www/minside/404.html

 

Resultatet av www.minside.no/asdf er en standard 404-side laget av Apache. Legg derimot merke til 'Additonally [...]'-biten.

 

Not Found

The requested URL /asdf was not found on this server.

 

Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.

 

Apache/2.2.16 (Debian) Server at www.elks.no Port 80

Så ja, hvordan går jeg frem for å sette opp custom 404 for alle mine VirtualHost's?

Lenke til kommentar
Videoannonse
Annonse

Jeg har prøvd å skrive dette for å teste, men det fungerte heller ikke.

 

ErrorDocument 404 /404.php

Om du skriver full url så blir det tolket som ekstern host, og dermed en redirect. Derfor vil ikke webroboter behandle det som feilen som gis ut (404), og det er derfor ingen god idé å bruke full url. Kilde:

 

Note that when you specify an ErrorDocument that points to a remote URL (ie. anything with a method such as http in front of it), Apache will send a redirect to the client to tell it where to find the document, even if the document ends up being on the same server. This has several implications, the most important being that the client will not receive the original error status code, but instead will receive a redirect status code. This in turn can confuse web robots and other clients which try to determine if a URL is valid using the status code.

Forøvrig fungerer det heller ikke hos meg ved bruk av ekstern host.

Endret av Occi
Lenke til kommentar

Jeg har prøvd å skrive dette for å teste, men det fungerte heller ikke.

 

ErrorDocument 404 /404.php

Om du skriver full url så blir det tolket som ekstern host, og dermed en redirect. Derfor vil ikke webroboter behandle det som feilen som gis ut (404), og det er derfor ingen god idé å bruke full url. Kilde:

 

Note that when you specify an ErrorDocument that points to a remote URL (ie. anything with a method such as http in front of it), Apache will send a redirect to the client to tell it where to find the document, even if the document ends up being on the same server. This has several implications, the most important being that the client will not receive the original error status code, but instead will receive a redirect status code. This in turn can confuse web robots and other clients which try to determine if a URL is valid using the status code.

Forøvrig fungerer det heller ikke hos meg ved bruk av ekstern host.

 

Får du opp den forventede 404 siden dersom du går til www.example.com/404.html eller www.foo.com/404.html ?

Dersom du skriver en beskjed direkte (ErrorDocument 404 "Skriv din beskjed her"), kommer den opp dersom du går til en side som ikke eksisterer?

Lenke til kommentar

Det fungerer å skrive

 

ErrorDocument 404 /404.html

 

Men da får jeg ikke sendt til en underside á www.example.com/?p=404 for å kjøre include på head/footer og slikt.

 

ErrorDocument 404 "Denne siden eksisterer ikke"

 

Gir samme feilmeldingen som ved bruk av .php-fil, nemlig standard apache 404-error.

Jeg tror det må være noe med instillingene, for jeg har sett eksempler av kode hvor man har brukt filer som ender med .php eller url á ?p=404 (dog kun ved bruk av .htaccess, da nettet er overfylt av .htaccess info).

Endret av Occi
Lenke til kommentar

Det fungerer å skrive

 

ErrorDocument 404 /404.html

 

Men da får jeg ikke sendt til en underside á www.example.com/?p=404 for å kjøre include på head/footer og slikt.

 

ErrorDocument 404 "Denne siden eksisterer ikke"

 

Gir samme feilmeldingen som ved bruk av .php-fil, nemlig standard apache 404-error.

Jeg tror det må være noe med instillingene, for jeg har sett eksempler av kode hvor man har brukt filer som ender med .php eller url á ?p=404 (dog kun ved bruk av .htaccess, da nettet er overfylt av .htaccess info).

 

Vil anbefale deg å se på mod_rewrite for å finne løsningen. Jeg har brukt mod_rewrite litt før, men det er lenge siden sist jeg holdt på med avansert konfigurasjon av Apache.

 

[QUERY_STRING] => e=404

og

Emulating ErrorDocuments with Mod_Rewrite ^

 

The ErrorDocument directive is helpful because an errordocument is called differently then a normal file' date=' and it contains special variables to help an admin debug.

 

I've wanted to use a RewriteCond + a RewriteRule to cause an Apache ErrorDocument to be displayed for a long time... I finally figured it out. Simply use the HTTP STATUS CODE trick in combination with a simple RewriteRule to trigger an Apache ErrorDocument.

 

This code emulates the internal 404 process Apache goes through.. If the file is not found it requests the /test/trigger-error/404 internally which triggers the 404 ErrorDocument.

 

ErrorDocument 404 /test/errordocument/404.html

Redirect 404 /test/trigger-error/404

 

RewriteEngine On

RewriteBase /

RewriteCond %{ENV:REDIRECT_STATUS} !=404

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule .* /test/trigger-error/404 [L']

 

Big Deal.. you might say... well consider that this works with any status code, and using this method you now have the power to trigger any errordocument page based on any kind of rewritecond. I'll be writing about some practical uses for this powerful method in the coming weeks, but heres a good example now so you can see how it can be used.

 

This bit of code Triggers the 505 HTTP Version Not Supported When a request is made to the server with a protocol other than 1.1.

 

Kilde: avansert bruk av mod_rewrite

Lenke til kommentar

Virket som en fin side det der, men som så altfor mange andre sider jeg har vært innom så beskriver også den prosessen med bruk av .htaccess, og jeg har ikke nok kunnskaper til å overføre mod_rewrite-koden direkte til VirtualHost :\

 

Dessuten, må jeg virkelig ty til mod_rewrite for å bruke .php-filer (med argumenter vha. get)? Har sett guider hvor folk bare skriver det rett inn uten noe mer, men de bruker .htaccess og kanskje det er satt noe i httpd.conf for at det skal fungere som de ikke vet om?

 

Jeg har en VPS med root-tilgang og regelen tilsier jo at om du har tilgang til httpd.conf, så bruk alltid det i stedet for .htaccess. Ryddigere, raskere og lettere. Så hadde vært flott om jeg slapp å dele konfigurasjonen min mellom httpd.conf og noen .htaccess-filer her og der plutselig.

Endret av Occi
Lenke til kommentar

Virket som en fin side det der, men som så altfor mange andre sider jeg har vært innom så beskriver også den prosessen med bruk av .htaccess, og jeg har ikke nok kunnskaper til å overføre mod_rewrite-koden direkte til VirtualHost :\

 

Dessuten, må jeg virkelig ty til mod_rewrite for å bruke .php-filer (med argumenter vha. get)? Har sett guider hvor folk bare skriver det rett inn uten noe mer, men de bruker .htaccess og kanskje det er satt noe i httpd.conf for at det skal fungere som de ikke vet om?

 

 

Jeg har en VPS med root-tilgang og regelen tilsier jo at om du har tilgang til httpd.conf, så bruk alltid det i stedet for .htaccess. Ryddigere, raskere og lettere. Så hadde vært flott om jeg slapp å dele konfigurasjonen min mellom httpd.conf og noen .htaccess-filer her og der plutselig.

 

Er helt enig med deg i det. Dog må man i httpd.conf (eller vhost.conf filen) enable AllowOverride for at .htaccess filer skal kunne override konfigurasjonen i httpd.conf.

I bunn og grunn, kan det settes inn i en .htaccess fil så kan det også settes inn i en .conf fil.

 

Dersom du har mulighet, test det på en annen vps før du overfører endringen(e) til serveren du har nå.

Lenke til kommentar

Jepps, har skjønt at de samme funksjonene/metodene skal fungere i httpd.conf også, men tror kanskje jeg må bruke <Directory> i stedet for <VirtualHost> om jeg skal begynne med Rewriting, er litt usikker nemlig.

 

Har mulighet til å installere Apache lokalt og teste, men vil gjerne prøve å få det helt klart om hvorvidt man må bruke rewriting eller ei når man skal benytte seg av .php-filer som ErrorDocument, og da gjerne også med argumenter som nevnt (get, ?p=404).

 

Tror du at det i utgangspunktet burde ha fungert med ErrorDocument 404 /404.php, eller ikke? Fordi som nevnt så finner jeg andre som har skrevet dette på nettet, men det fungerer jo rett og slett ikke :p

 

Edit:

Hahah er det mulig! Var en .htaccess-fil i ServerRoot som jeg hadde glemt helt! Må ha vært fra starten når jeg ikke kunne helt dette her med httpd.conf og bare fulgte guider helt braindead. Så pinlig blush.gif

 

Nå fungerer det ypperlig med å rett og slett skrive:

 

ErrorDocument 404 /?p=404

Trenger faktisk ingenting mer! Resultatet kan sees her. Ingenting fancy menmen.

Endret av Occi
Lenke til kommentar

Jepps, har skjønt at de samme funksjonene/metodene skal fungere i httpd.conf også, men tror kanskje jeg må bruke <Directory> i stedet for <VirtualHost> om jeg skal begynne med Rewriting, er litt usikker nemlig.

 

Har mulighet til å installere Apache lokalt og teste, men vil gjerne prøve å få det helt klart om hvorvidt man må bruke rewriting eller ei når man skal benytte seg av .php-filer som ErrorDocument, og da gjerne også med argumenter som nevnt (get, ?p=404).

 

Tror du at det i utgangspunktet burde ha fungert med ErrorDocument 404 /404.php, eller ikke? Fordi som nevnt så finner jeg andre som har skrevet dette på nettet, men det fungerer jo rett og slett ikke :p

 

Edit:

Hahah er det mulig! Var en .htaccess-fil i ServerRoot som jeg hadde glemt helt! Må ha vært fra starten når jeg ikke kunne helt dette her med httpd.conf og bare fulgte guider helt braindead. Så pinlig blush.gif

 

Nå fungerer det ypperlig med å rett og slett skrive:

 

ErrorDocument 404 /?p=404

Trenger faktisk ingenting mer! Resultatet kan sees her. Ingenting fancy menmen.

 

 

Hehe :) kjenner meg godt igjen i det. Det skjer med alle at man overser den enkle løsningen på problemet da man tenker for avansert med en gang.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...