[PHP/Apache] Zoekmachine vriendelijke url, 404 header blijft

Pagina: 1
Acties:

Onderwerpen


  • mr._Anderson
  • Registratie: Februari 2000
  • Niet online

mr._Anderson

[Een man is nog geen Tweaker]

Topicstarter
Ik ben een nieuwe website aan het opbouwen, daarbij ben ik momenteel het framework aan het opzetten. Eén van de eisen is dat er zoekmachine vriendelijk url's gebruikt gaan worden als in

www.domein.nl/var1/var2/enz.

Na onderzoek zijn er verschillende manier om dit te doen:
1. www.domein.nl/index.php/var1/var2
2. www.domein.nl/var1/var2
3. www.domein.nl/index/var1/var2

De hosting ruimte is op dit moment al geregeld en wordt betaald, het is dus eigenlijk geen optie deze nog te veranderen (o.a. omdat daar ook de domeinen zijn ondergebracht.)
Echter, door de huidige hoster vallen opties 1 en 3 al af want:
1. www.domein.nl/index.php/var1/var2
--> genereerd een foutmelding welke volgens de hoster niet opgelost kan worden
3. www.domein.nl/index/var1/var2
--> ze ondersteunen geen .htaccess wat bij deze nodig is.

Ik heb al contact gehad met de hoster (dds) en daaruit komt het volgende: ze gebruiken een eigen rewrite van de apache software. Deze rewrite is closed source en de specificaties hiervan weet ik dus ook niet.
.htaccess wordt door deze rewrite niet ondersteund dus dat kan ik niet gebruiken, en ik kan zelf geen rewrite op de rewrite maken.

De mensen van dds zijn echter wel hulpzaam geweest en op dit moment gebeurd er het volgende. Binnen de standaard pakketten worden de 404's omgeleid naar het bestand 'nietgevonden.html'. Ik wilde dat de 404's echter naar een php bestand toegeleid werden en het `nietgevonden.html` bestand wordt op dit moment dan ook uitgevoerd als een PHP bestand waardoor ik php code in het html document kan zetten.

Misschien niet de meeste mooie oplossing, maar het werkt.

Nog 1 probleem ... de 404 header die standaard wordt meegestuurd moet omgezet worden naar een 200 header want er is natuurlijk niets mis, en zoek machine's moet dat ook niet gaan "denken".

Om dit te bereiken gebruik ik de volgende code:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
header( "HTTP/1.1 200 OK" );
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>geen 404</title>
    </head>

    <body>
        <?php echo('Dit moet geen 404 zijn.'); ?>
    </body>
</html>


De pagina wordt keurig als php uitgevoerd en komt mooi afgebeeld.
Wanneer ik echter ga controleren met www.web-sniffer.com dan krijg ik het volgende:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
HTTP Request Header

Connect to <<ip>> on port 80 ... ok

GET /foofoo HTTP/1.1[CRLF]
Host: www.domein.nl[CRLF]
Connection: close[CRLF]
Accept-Encoding: gzip[CRLF]
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5[CRLF]
Accept-Language: en-us,en;q=0.5[CRLF]
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7[CRLF]
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.12) Gecko/20050915 Firefox/1.0.7 Web-Sniffer/1.0.22[CRLF]
Referer: http://web-sniffer.net/[CRLF]
[CRLF]

HTTP Response Header
Name    Value   Delim
HTTP Status Code: HTTP/1.1 [b]404[/b] Not Found
Date:   Thu, 17 Nov 2005 19:14:19 GMT   CRLF
Server: Apache/1.3.33 (Debian GNU/Linux) mod_fastcgi/2.4.2  CRLF
Connection: close   CRLF
Transfer-Encoding:  chunked CRLF
Content-Type:   text/html   CRLF
Content (0.28 KiB)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>geen 404</title>
  </head>

  <body>
    Dit moet geen 404 zijn.  </body>
</html>


Wanneer ik onderaan nogmaals een header 200 stuur krijg ik niet eens de foutmelding dat de header al verstuurd is.
Ik heb zelf al van alles geprobeerd maar weet echt niet waar ik dit nog moet zoeken. Heeft iemand een idee of dit server afhankelijk is, of PHP ?? Heeft iemand een oplossing??

ps ik kan/mag helaas het domein nog niet vrijgeven.

-=[Een wijs man zei eens: als een tweaker heb ik zo mijn TCP-IP connecties. Deze uitspraak staat tot op de dag van vandaag © mr._Anderson]=-=[ AMD64 overclock en registratie site: AMDGeeks.net


  • killercow
  • Registratie: Maart 2000
  • Laatst online: 18-09 12:47

killercow

eth0

PHP:
1
2
3
4
<?php
header("HTTP/1.1 200 OK");
header("Status: 200 OK");
?>

alletwee proberen.

openkat.nl al gezien?


  • JKVA
  • Registratie: Januari 2004
  • Niet online

JKVA

Design-by-buzzword fanatic

Het is naar mijn idee een hack van hier tot Tokyo, en er is ook niet zoveel voor nodig om de boel compleet plat te leggen. Niet zo handig voor de main navigatie van een site. Bovendien weet ik niet hoe zoekmachines/mobiele telefoons/etc.... ermee omgaan.

Kun je niet zoiets als: "www.domein.nl/map/map/index.php" maken? index.php is bij elke provider ingesteld als default document, waardoor je em kan aanroepen als: "www.domein.nl/map/map"

Volgens mij komt dat overeen met optie 1 of niet?

Het is sowieso minder gevoelig dan een hack zoals in de TS mijns insziens

Fat Pizza's pizza, they are big and they are cheezy


  • Xandrios
  • Registratie: Februari 2001
  • Laatst online: 16:24
Begrijp ik het goed dat je hoster altijd een 404-header meestuurd? Dat is imho voldoende om je contract te ontbinden, dat is GEEN werkende hosting.

Daarnaast vraag ik me af of je hoster niet allerlei regels overtreedt met hun zgn "closed source" van Apache. Mag dat wel, Apache code aanpassen en niet weer beschikbaar stellen aan de opensource gemeenschap?

  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 16:36
Xandrios schreef op donderdag 17 november 2005 @ 20:34:
Begrijp ik het goed dat je hoster altijd een 404-header meestuurd? Dat is imho voldoende om je contract te ontbinden, dat is GEEN werkende hosting.

Daarnaast vraag ik me af of je hoster niet allerlei regels overtreedt met hun zgn "closed source" van Apache. Mag dat wel, Apache code aanpassen en niet weer beschikbaar stellen aan de opensource gemeenschap?
1. Nee, TS probeert via de 404 de navigatie van zijn site te regelen. De 404 is dus logisch, de bedoeling is die header te overrulen.

2. Je mag best een closed source versie van iets onder de GPL maken en gebruiken. Pas bij het verspreiden/openbaarmaken zijn de passages die verplichten om source te leveren relevant.

Regeren is vooruitschuiven


  • JKVA
  • Registratie: Januari 2004
  • Niet online

JKVA

Design-by-buzzword fanatic

offtopic:
dat openbaar maken is in dit geval toch hetzelfde als commercieel gebruiken?

Fat Pizza's pizza, they are big and they are cheezy


  • NS_5
  • Registratie: Februari 2005
  • Laatst online: 18-12-2024
kun je niet www.site.nl/?var1=blaaaat&var2=blaat2&var3=blob
en dan word het in php

<?
echo $_GET["var"];
?>

krijg je "blaaaat" op je scherm

  • mr._Anderson
  • Registratie: Februari 2000
  • Niet online

mr._Anderson

[Een man is nog geen Tweaker]

Topicstarter
killercow schreef op donderdag 17 november 2005 @ 20:27:
PHP:
1
2
3
4
<?php
header("HTTP/1.1 200 OK");
header("Status: 200 OK");
?>

alletwee proberen.
Harstikke bedankt! Nu krijgt hij eindelijk een 200 :)
Wat ik wel raar blijf vinden is dat ik zelf voordat ik de header meestuur een echo() kan geven.. en dan nog krijgt hij de goede header, en geeft hij geen foutmelding :S
JKVA schreef op donderdag 17 november 2005 @ 20:30:
Het is naar mijn idee een hack van hier tot Tokyo, en er is ook niet zoveel voor nodig om de boel compleet plat te leggen. Niet zo handig voor de main navigatie van een site. Bovendien weet ik niet hoe zoekmachines/mobiele telefoons/etc.... ermee omgaan.

Kun je niet zoiets als: "www.domein.nl/map/map/index.php" maken? index.php is bij elke provider ingesteld als default document, waardoor je em kan aanroepen als: "www.domein.nl/map/map"

Volgens mij komt dat overeen met optie 1 of niet?

Het is sowieso minder gevoelig dan een hack zoals in de TS mijns insziens
Ja, ik weet dat het een hack is...
maar foutgevoelig. Nu hij elke keer een 200 header meestuurd kan er toch niets mis gaan? Ik wil zelf ook de beste oplossing hoor :) maar de 404 wordt gewoon omgestuurd naar iets goeds.

Op welke manier verwacht jij dat het fout kan gaan?

Je map/map/index.php is trouwens een leuk alternatief, ga ik zeker even over nadenken. Het is echter niet hetzelfde als optie 1. Daarbij maak je gebruik van het feit dat apache de hyperlink terug scanned naar een bestaand bestand.. dus bijv. www.domein.nl/index.php/var1/var2 :
apache zegt dan:
var2 bestaat niet..
var1 bestaat niet..
hey! index.php bestaat, en die pakt hij dan.
Je kan dan zelf var1/var2 gebruiken voor andere zaken.

Jou alternatief is iets wat geen "hack" is, maar zorgt er wel voor dat ik voor alle verschillende opties mappen aan zou moeten maken, dat betekend veel werk, foutgevoelig... maar geen hack :) (ik ga d'r over denken)
Xandrios schreef op donderdag 17 november 2005 @ 20:34:
Begrijp ik het goed dat je hoster altijd een 404-header meestuurd? Dat is imho voldoende om je contract te ontbinden, dat is GEEN werkende hosting.

Daarnaast vraag ik me af of je hoster niet allerlei regels overtreedt met hun zgn "closed source" van Apache. Mag dat wel, Apache code aanpassen en niet weer beschikbaar stellen aan de opensource gemeenschap?
Ze stuurde alleen een 404 bij een 404. Anders is het gewoon een 200 gelukkig :)
Verder heb ik er niet zo'n verstand van wat wel en niet mag bij apache, maar DDS is best een flinke organisatie dus ik neem aan dat die hun zaakjes wel op orde hebben.
T-MOB schreef op donderdag 17 november 2005 @ 20:40:
[...]

1. Nee, TS probeert via de 404 de navigatie van zijn site te regelen. De 404 is dus logisch, de bedoeling is die header te overrulen.

2. Je mag best een closed source versie van iets onder de GPL maken en gebruiken. Pas bij het verspreiden/openbaarmaken zijn de passages die verplichten om source te leveren relevant.
Duidelijk dus :)

Bedankt allemaal!

-=[Een wijs man zei eens: als een tweaker heb ik zo mijn TCP-IP connecties. Deze uitspraak staat tot op de dag van vandaag © mr._Anderson]=-=[ AMD64 overclock en registratie site: AMDGeeks.net


  • mr._Anderson
  • Registratie: Februari 2000
  • Niet online

mr._Anderson

[Een man is nog geen Tweaker]

Topicstarter
NS_5 schreef op donderdag 17 november 2005 @ 20:50:
kun je niet www.site.nl/?var1=blaaaat&var2=blaat2&var3=blob
en dan word het in php

<?
echo $_GET["var"];
?>

krijg je "blaaaat" op je scherm
Zeker ook een optie, maar dit soort oplossingen staan veel minder mooi als: www.site.nl/blaaaat/blaat/blob

Om die reden wilde ik eerste proberen of ik het fatsoenlijk op die manier voor elkaar zou kunnen krijgen.

-=[Een wijs man zei eens: als een tweaker heb ik zo mijn TCP-IP connecties. Deze uitspraak staat tot op de dag van vandaag © mr._Anderson]=-=[ AMD64 overclock en registratie site: AMDGeeks.net


  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 16:36
JKVA schreef op donderdag 17 november 2005 @ 20:47:
offtopic:
dat openbaar maken is in dit geval toch hetzelfde als commercieel gebruiken?
offtopic:
Nee. Het openbaarmaken zou zijn dat ze de applicatie die gebaseerd is op de GPL'ed code verkopen / ter download aanbieden. GPL verplicht je dan de broncode van die applicatie ook te leveren, iig als daar om gevraagd wordt. Apache valt eigenlijk niet onder de GPL maar heeft een eigen licentie, aangezien die ook gecertificeerd Open Source is mag je hoe dan ook een aangepaste versie gebruiken. Commercieel of niet is verder niet relevant...

Regeren is vooruitschuiven

Pagina: 1