Partyflock
 
Forumonderwerp · 694668
 
ik wil ivm het opstellen van een goed 404 errordocument de url weten die niet werkte. Door bepaalde serverinstellingen die ik niet kan veranderen ben ik genoodzaakt om de url mee te sturen bij de redirect die bij het .htaccess bestand plaatsvindt:

ErrorDocument 404 /test/errors/404.php?url=

en na de = moet dan uiteraard de url komen, ik heb wel een {SCRIPT_URI} variabele ontdekt, maar geen idee hoe ik die doorstuur... is dat mogelijk en zo ja, hoe?
volgens mij kan je beter naar een ander forum gaan met die vraag...
tweakers.net
weten ze wel raad
 
heb ik het ook al gevraagd, nog geen antwoord en hier zitten vast ook wel wat mensen met verstand van apache etc ;)
Je moet het volgende even in je .htaccess zetten. Anders werkt de methode waar jij mee wil werken niet. Weet ff niet zeker of het GET of POST is met een variabele achter de url, maar deze setting staat standaard uit :)

php_flag register_globals on
 
variabele meesturen in url is GET, maar met dat regeltje zorg ik alleen voor dat het mogelijk is begrijp ik?

zou ErrorDocument 404 /test/errors/404.php?url={SCRIPT_URI} dan wel gewoon moeten werken als ik dat erbij zet?
probeer het ;)

ik zal morgen eens kijken hoe de htacces van tilbo.com eruit ziet dan kan ik kijken of ik daar wat in kan vinden
Je hoeft afaik niet in de je httpd.conf via GET de URI mee te geven aan je script.

Ik raad je het volgende aan:

- Zet in je httpd.conf de volgende regel:
ErrorDocument 404 /missing.php


- Maak het bestand missing.php met ongeveer de volgende code:
<?
echo "You wanted to visit: " . $_SERVER['REDIRECT_URL'] . "<br />";
echo "This also works: " . $_SERVER['REQUEST_URI'];
?>


Dit kan je uiteraard nog allemaal uitbreiden etc.

PS1: dit is met Apache 2.0.50 en PHP 4.3.8

PS2: probeer ook eens het volgende in missing.php
<? print_r($_SERVER): ?>


laatste aanpassing
 
even een copy-paste van mijn topic @ tweakers:

Punt is, als ik in die PHP-file het foutieve adres wil opvragen krijg ik het adres van de 404-pagina terug, ik moet het adres dus hebben van voor de redirect. Voor je je afvraagt of dit echt niet naar php wordt doorgestuurd: nee, ik heb de volledige $_SERVER array uitgeprint en phpinfo() en daar staat niets van het orginele adres in.
Omdat ik deze pagina generiek wil maken zodat ik hem de volgende keer kan gebruiken wil ik het toch graag oplossen in plaats van het weglaten. Dus wil ik het adres meesturen vanuit de .htaccess file, iets in de vorm van:

ErrorDocument 404 /test/errors/404.php?url={SCRIPT_URI}

{SCRIPT_URI} heb ik daar neergezet om aan te geven dat het om die variabele gaat, die heb ik inmiddels gevonden, punt is dat hij die niet meestuurt en ik heb de afgelopen 3 uur nergens kunnen vinden hoe dat wel zou moeten. Vriend van me zegt dat ik kan proberen om $1 mee te sturen, dat zou de eerste meegegeven variabele zijn. Als ik dat doe krijg ik die ongeparsed weer terug (hij komt PHP dus letterlijk als "$1" binnen).

print_r($_)SERVER) bij een ingevoerde url "http://www.anwautos.nl/test/blah/":


Array (
[DOCUMENT_ROOT] => /data/members/paid/a/n/anwautos.nl/htdocs/www
[HTTP_ACCEPT] => application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1
[HTTP_ACCEPT_CHARSET] => ISO-8859-1,utf-8;q=0.7,*;q=0.7
[HTTP_ACCEPT_ENCODING] => gzip,deflate
[HTTP_ACCEPT_LANGUAGE] => en-us,en;q=0.5
[HTTP_CONNECTION] => close
[HTTP_HOST] => www.anwautos.nl
[HTTP_USER_AGENT] => Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.6) Gecko/20040206 Firefox/0.8
[HTTP_X_FORWARDED_FOR] => 81.59.76.22
[HTTP_X_FORWARDED_HOST] => www.anwautos.nl
[HTTP_X_FORWARDED_SERVER] => customers.webc.lyceu.net
[PATH] => /bin:/usr/bin:/sbin:/usr/sbin
[REDIRECT_QUERY_STRING] => url=$1
[REDIRECT_SCRIPT_URI] => http://www.anwautos.nl/test/errors/404.php
[REDIRECT_SCRIPT_URL] => /test/errors/404.php
[REDIRECT_STATUS] => 200
[REDIRECT_URL] => /404.php
[REMOTE_ADDR] => 81.59.76.22
[REMOTE_PORT] => 58304
[SCRIPT_FILENAME] => /data/members/paid/a/n/anwautos.nl/htdocs/www/test/errors/404.php
[SCRIPT_URI] => http://www.anwautos.nl/test/errors/404.php
[SCRIPT_URL] => /404.php
[SERVER_ADDR] => 212.78.206.120
[SERVER_ADMIN] => webadmin@lycos-europe.com
[SERVER_NAME] => www.anwautos.nl
[SERVER_PORT] => 80
[SERVER_SIGNATURE] =>
[SERVER_SOFTWARE] => Apache (UNIX)
[GATEWAY_INTERFACE] => CGI/1.1
[SERVER_PROTOCOL] => HTTP/1.1
[REQUEST_METHOD] => GET
[QUERY_STRING] => url=$1
[REQUEST_URI] => /test/errors/404.php?url=$1
[SCRIPT_NAME] => /404.php
[PATH_INFO] => /test/errors/404.php
[PATH_TRANSLATED] => /data/members/paid/a/n/anwautos.nl/htdocs/www/test/errors/404.php
[PHP_SELF] => /test/errors/404.php
)


dus via PHP superglobals gaat het zeker weten niet lukken ;)


laatste aanpassing
Welke Apache en PHP versie heb je dan?
 
http://www.anwautos.nl/test/faq/

heb ff een phpinfo(); voor je geplaatst :)

server is van lycos, dus daar kan ik zelf niet zoveel aan aanpassen helaas

edit: je kan hier trouwens kijken wat ik nu heb voor 404 page :)
laatste aanpassing
 
ja die kan ik alleen niet lezen zonder member te zijn, waar je voor moet betalen :(
Vreemd :S Ik betaal geen cent maar kan het gewoon lezen. Iig, sorry dat ik hier nu de layout verneuk, maar hier komt dat draadje :)

Dear all,

First of all, sorry if this question was already answered... i didn´t found it!
Well, i´m using Apache 1.3 and its ErrorDocument for my website. I´m using php too, and the problem is that after redirected to an error page, let´s say 404, i lost globals data like HTTP_REFERER, or even QUERY_STRING and REQUEST_URI.

It´s not that important, anyway i would like to show in the 404 page the Url that the visitor was looking for, before the redirection.

Well, i´m almost sure it´s an Apache issue and not php.

Another question... sorry!
Why Apache don´t automatically send an HTTP status, e.g.: 404, when redirecting to a page!?
Is that normal !? Or... is any way to make it possible!?

Thank you


In PHP

HTTP_REFERER wont be set since it was redirected
QUERY_STRING is only for current page
REQUEST_URI is only for current page

You can try putting this in your apache http.conf file or a .htaccess file.
----------------------

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ http://www.mysite.com/404.php?url=$1 [L]

-----------------------
Will check the requested file if it exists. If it doesnt then it wil reidrect to your page appending the requested file as a variable $_GET variable.


Regards.
Nick

Comment from gesf
Date: 07/03/2004 11:49PM PDT
Author Comment


Hi Nick, thanks for your reply!

The error thing is working fine. I´ve made same changes for my needs. It´s now redirecting to the error page and showing the searched file/url and keeps it in the address bar.

Here is what i have:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^/(.*)$ site/error/404.php?url=$1 [L]

'site' is my website folder, i don´t have it in the root, so i always need to specify it.

The problem is that i´m using the 'DirectoryIndex' and other 'rewrites' and if i don´t specify the directory´s default page in the url it goes to the error page. The same to other 'rewrites'... they fail!
Don´t know if it matters, but i´m using: Options ExecCGI FollowSymLinks Includes MultiViews, so the rewrites can work!

Any idea!?

Sincerely,
Gesf

Comment from CrYpTiC_MauleR
Date: 07/04/2004 05:04AM PDT
Comment


Could you paste your other rewrites and settings here? Thanks!

Comment from gesf
Date: 07/04/2004 09:55PM PDT
Author Comment


Of course! Here goes:

RemoveHandler .html .htm .xhtml
AddType application/x-httpd-php .php .html .htm .xhtml
AddHandler cgi-script .cgi .pl
# This one fails if don´t specify the default page in the url.

DirectoryIndex site.php default.php

<FilesMatch "\.(ht|ini)$">
Order allow,deny
Deny from all
</FilesMatch>

Options ExecCGI FollowSymLinks Includes MultiViews
RewriteEngine On
RewriteBase /
# This one fails too... to the 404 error page!
RewriteRule ^/tutorials/(.*)/(.*).htm site/tutorials/?tutcat=$1&tutid=$2 [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^/(.*)$ site/error/404.php?url=$1 [L]

ErrorDocument 400 http://127.0.0.1/site/error/400.php
ErrorDocument 401 http://127.0.0.1/site/error/401.php
ErrorDocument 403 http://127.0.0.1/site/error/403.php
# ErrorDocument 404 http://127.0.0.1/site/error/404.php
... and so on with this. They are the last thing!

I was wrong! Is just the DirectoryIndex which isn´t working! The other rewrite fails:
"... tutorials/?tutcat ...". Because i´m not passing the default dir page!
But... i want to use it :(

Thanks in advance!

Comment from gesf
Date: 07/04/2004 10:23PM PDT
Author Comment


Another thing!
Using the the code you gave me, i can´t view .htm or .html files. Just .php... strange!
Thanks

Comment from ahoffmann
Date: 07/05/2004 03:02AM PDT
Comment


stupid question: why do you redirect for error pages?
if apache just uses rewrite rules all server variables (like REFERER) should be available

Comment from gesf
Date: 07/05/2004 05:50AM PDT
Author Comment


Hey ahoffmann,
Yes, the referer is available, but (using ErrorDocument):
I request a page to the server and if it didn´t find it, it will redirect me to the error page. That´s when i loose the referer. Like CrYpTiC_MauleR said, in php, the referer won´t be set since it was redirected. So the idea is to catch the referer (before the error) and send it with the error page... as a variable. That´s what does that rewrite rule.

BTW CrYpTiC_MauleR: I try to find, but i couldn´t! What does " !-f " means?

Regards
Gesf

Comment from ahoffmann
Date: 07/05/2004 06:56AM PDT
Comment


!-f
means: if file not exists, or is not a file

Comment from gesf
Date: 07/05/2004 10:03AM PDT
Author Comment


Thanks ;)
Well, the rewrite is working, the only problem is that DirectoryIndex fails with it :(
Regards


laatste aanpassing
 
u bent geweldig ;)

alleen krijg ik nu een 403 error, forbidden...

heb nu dit staan:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /test/errors/404.php?url=$1 [L]


404.php is de file die de errormessage weergeeft...

wel vreemd trouwens dat bv:
ErrorDocument 404 /test/errors/404.php?url=$1


niet werkt, dan parset hij die $1 niet...

any ideas? :(
De $1 lijkt gebruikt te worden door de regular expression ^(.*)$ , vandaar dat hij zonder regex (en dus zonder Rewrite) niet werkt denk ik.

Kijk anders ook ff op http://httpd.apache.org/docs/misc/rewriteguide.html onder 'Redirect Failing URLs To Other Webserver'.
 
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+) http://www.anwautos.nl/test/errors/404.php?url=$1


letterlijk overgenomen van de apache docs.. zelfde error :( . Heb de lycos helpdesk gebeld en daar weten ze geen raad met deze vraag :s dus kga ze nu mailen want ik zie niet wat ik fout doe, volgens hun hebben de .htaccess files op hun servers geen beperkingen "dus zal de fout wel bij mij liggen".