[PHP] instellen htacces

Pagina: 1
Acties:
  • 2.224 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Sgrovert
  • Registratie: Mei 2004
  • Laatst online: 17:19
Op mijn huidige site wordt via het .htaccess bestand alle verkeer van niet bestaande pagina's naar index.php geleid.
Dit doe ik door middel van de volgende code in het .htaccess bestand:
"ErrorDocument 404 /index.php"

In principe geeft de site daarmee de correcte informatie weer.
deze pagina: http://www.limusic.nl/home.php wordt doorgeleid naar index.php, daar de url uitgelzen, en de goede content weergegeven.
Echter als ik de site probeer te valideren, krijg ik deze error.

Ik vermoed dat dit komt omdat altijd een error genegeerd wordt door mijn code. Wat is de correcte manier om te doen wat ik wil?

[ Voor 0% gewijzigd door Sgrovert op 01-05-2007 16:55 . Reden: extra s hij htaccess ]

Lost In Music


Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Ten eerste is het .htaccess, en ten tweede kan je toch gewoon index.php proberen te valideren? Die validator is er niet om jouw redirects en andere trucjes te testen.

{signature}


Acties:
  • 0 Henk 'm!

  • SchizoDuckie
  • Registratie: April 2001
  • Laatst online: 18-02 23:12

SchizoDuckie

Kwaak

Ik gok dat je in je index.php nog ergens een http 200 found header moet toevoegen :)

Stop uploading passwords to Github!


Acties:
  • 0 Henk 'm!

Verwijderd

quote]SchizoDuckie schreef op dinsdag 01 mei 2007 @ 16:19:
Ik gok dat je in je index.php nog ergens een http 200 found header moet toevoegen :)
[/quote]

niet nodig. apache doet dat deel.
en de index.php valideert normaal.

Waarom gebruik je btw index.php EN home.php voor hetzelfde doeleinde?

[ Voor 75% gewijzigd door Verwijderd op 01-05-2007 16:24 . Reden: had het ff verkeerd.. :/ ]


Acties:
  • 0 Henk 'm!

  • AtleX
  • Registratie: Maart 2003
  • Niet online

AtleX

Tyrannosaurus Lex 🦖

Sgrovert schreef op dinsdag 01 mei 2007 @ 16:14:
Op mijn huidige site wordt via het .htacces bestand alle verkeer van niet bestaande pagina's naar index.php geleid.
Dit doe ik door middel van de volgende code in het .htacces bestand:
"ErrorDocument 404 /index.php"

In principe geeft de site daarmee de correcte informatie weer.
deze pagina: http://www.limusic.nl/home.php wordt doorgeleid naar index.php, daar de url uitgelzen, en de goede content weergegeven.
Wat een ontzettende baggermanier, kan je niet beter met mod_rewrite alles naar index.php rewriten en dan de URL uitlezen? Dan hoef je in principe de code die je nu gebruikt niet echt aan te passen maar ben je wel netter (vooral SEO-wise) bezig.

Sole survivor of the Chicxulub asteroid impact.


Acties:
  • 0 Henk 'm!

  • jelmervos
  • Registratie: Oktober 2000
  • Niet online

jelmervos

Simple user

Ik krijg gewoon 404 terug hoor:

Request:
code:
1
2
3
4
5
6
7
8
9
GET /home.php HTTP/1.1
Accept: */*
Referer: http://gathering.tweakers.net/forum/list_messages/1216187
Accept-Language: nl,en-US;q=0.5
UA-CPU: x86
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.1; .NET CLR 3.0.04506.30)
Proxy-Connection: Keep-Alive
Host: www.limusic.nl


Response header:
code:
1
2
3
4
5
6
7
8
9
10
HTTP/1.1 404 Not Found
Date: Tue, 01 May 2007 14:28:58 GMT
Server: Apache/2.0.55 (Debian) PHP/5.1.6-1
X-Powered-By: PHP/5.1.6-1
Set-Cookie: PHPSESSID=c8f1fdc7431b02c017bd79f126882403; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Content-Length: 4444
Content-Type: text/html; charset=UTF-8

"The shell stopped unexpectedly and Explorer.exe was restarted."


Acties:
  • 0 Henk 'm!

  • SchizoDuckie
  • Registratie: April 2001
  • Laatst online: 18-02 23:12

SchizoDuckie

Kwaak

AtleX schreef op dinsdag 01 mei 2007 @ 16:24:
[...]

Wat een ontzettende baggermanier, kan je niet beter met mod_rewrite alles naar index.php rewriten en dan de URL uitlezen? Dan hoef je in principe de code die je nu gebruikt niet echt aan te passen maar ben je wel netter (vooral SEO-wise) bezig.
Hij heeft het hier toch echt *niet* over een mod rewrite maar over 404 pages afvangen. URLS rewriten is heel wat anders imo, en daar vertelt ie ook niets over.

Verder zal een 200 found header er voor zorgen dat ook een apparaat wat anders is dan een webbrowser niet op z'n bek gaat.

Stop uploading passwords to Github!


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Och, zelfs internet explorer zal een eigen foutmelding pagina gaan geven wanneer 'vriendelijke foutmeldingen' aan staat.

De melding van de validator (en IE in vriendelijke mode) is overigens compleet terecht. De home.php pagina is een pagina die de computer middels de 404 header de melding geeft dat de URL niet gevonden kon worden.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Sgrovert
  • Registratie: Mei 2004
  • Laatst online: 17:19
Alle content van de site wil ik in de database die erachter hangt zetten. Aan de hand van de URL moet er daarna bepaald worden welke content uit de database gehaald moet worden.
De code die dat regelt staat in index,php . Dus het bestand home.php staat niet op de schijf. Deze wordt op het moment door het .htaccess bestand doorgestuurd naar index.php, welke alle informatie uit de url haalt en deze laat zien.
Echter kwam ik er vandaag dus achter dat er een 404 in de header meegestuurd wordt, wat dus niet de bedoeling is. Dus is er iets niet goed aan de manier waarop het op het moment gebeurd.

mod_rewrite lijkt een betere methode (na snel kijken wat hij doet) om mijn doel te bereiken, al ben ik op het moment aan het uitzoeken hoe deze precies werkt.
De bedoeling is dus dat ik alle verkeer naar 1 bestand op de server stuur.

Verder wil ik wel de mogelijkheid behouden om extra bestanden bij te kunnen plaatsen welke weer voorrang op het doorsturen krijgen.
Vb. op schijf deze twee bestanden:
index.php en
test.php

op moment dat een willekeurige pagina opgevraagd wordt, moet deze naar index.php doorgestuurd worden. Echter als test.php opgevraagd wordt, moet de inhoudt van test.php weergegeven worden.

Lost In Music


Acties:
  • 0 Henk 'm!

Verwijderd

Ter verduidelijking van de vraagstelling waag ik een gokje:
je bedoelt dat als gebruiker gaat naar home.php
dat apache denkt, dat je index.php?name=home bedoelt.
Vervolgens doe je
PHP:
1
$pagetoinclude = $_GET["name"]; // (let op injections, cross site scripting, enz)

en doe je in jouw index.php
PHP:
1
include($pagetoinclude);

toch?
Mooi, dan hoef je alleen maar hier op GoT te zoeken (tip: vooral in WSS zoeken). Heb toevallig vandaag een paar topics gevonden die precies daarover gingen.

[ Voor 3% gewijzigd door Verwijderd op 01-05-2007 17:41 ]


Acties:
  • 0 Henk 'm!

  • Sgrovert
  • Registratie: Mei 2004
  • Laatst online: 17:19
Niet helemaal.
in index.php wordt gekeken wat de URL is, en aan de hand daarvan wordt de pagina gegenereerd. (dus niet via ?name= ).

Lost In Music


Acties:
  • 0 Henk 'm!

  • AtleX
  • Registratie: Maart 2003
  • Niet online

AtleX

Tyrannosaurus Lex 🦖

Sgrovert schreef op dinsdag 01 mei 2007 @ 17:53:
Niet helemaal.
in index.php wordt gekeken wat de URL is, en aan de hand daarvan wordt de pagina gegenereerd. (dus niet via ?name= ).
Ja, dat zou je dus even aan moeten passen. :) Als het goed is hoef je dat maar op 1 plek te doen dus dat lijkt me niet zo'n probleem.

Sole survivor of the Chicxulub asteroid impact.


Acties:
  • 0 Henk 'm!

  • SchizoDuckie
  • Registratie: April 2001
  • Laatst online: 18-02 23:12

SchizoDuckie

Kwaak

Oooh je wil dus wél je URLs rewriten stiekum ;)
code:
1
2
3
4
5
6
7
RewriteEngine On
RewriteBase /             # als je site in subdir /sjakie/ staat maak je hier uiteraard /sjakie/ van 

RewriteRule ^includes/ - [L] [OR] #niet toepassen op directe requests naar /includes of 
RewriteRule ^images/ - [L] #niet toepassen op directe requests naar /images

RewriteRule ^(([^/]+)/){0,}([^/]+)?$ index.php [L]


in je index.php:
PHP:
1
print_r(explode('/', $_SERVER['REQUEST_URI']));

alstu :*

[ Voor 16% gewijzigd door SchizoDuckie op 01-05-2007 21:32 ]

Stop uploading passwords to Github!


Acties:
  • 0 Henk 'm!

  • Sgrovert
  • Registratie: Mei 2004
  • Laatst online: 17:19
Het rewriten is me gelukt. Alleen rewrite hij momenteel iets teveel. Door het rewriten, kan de stylesheet ook niet meer geladen worden. Daarnaast staan er een aantal php-bestanden op de schijf die wel normaal geladen moeten worden.

Is het met mod_rewrite mogelijk om alleen bestanden te rewriten die fisiek niet op de harde schijf staan?

Dus eigelijk:
if ($file niet EXIST) {
rewrite URL
}

Of kom ik dit op te vangen in de php code?

Lost In Music


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Waarom wil je dat eigenlijk? Het lijkt me niet echt handig wanneer een willekeurige URL gewoon de homepage oplevert zonder foutmelding.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Het is belangrijk om goede URLs te hebben, en niet URLs waar je binnen de korste keren van baalt zodat je eigenlijk op een andere benaming wil overstappen. Denk nou dus gewoon eerst na hoe je het wil indelen, kijk dan gewoon goed naar multiview & co en pas helemaal aan het eind van de rit moet je bepalen wat je doet bij een file not found error.

{signature}


Acties:
  • 0 Henk 'm!

  • AtleX
  • Registratie: Maart 2003
  • Niet online

AtleX

Tyrannosaurus Lex 🦖

Ik heb maar een voorbeeldje in elkaar geflanst, want dat is 1 van de dingen van mod_rewrite die niet eenvoudig te vinden zijn. :)
code:
1
2
3
4
5
6
7
8
9
Options -MultiViews

<IfModule mod_rewrite.c>
    RewriteEngine on
    
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php?file=$1 [NC]
</IfModule>

Alles wat nu geen bestaande file of directory is wordt nu gerewrite naar index.php?file=<filename>. In je index.php file kan je nu $_GET["file"] gebruiken om de bestandsnaam te achterhalen. Wel moet je dan bij niet bestaande files zelf een 404 error teruggeven aan de client.

[edit]
Kijk ook eens naar de mod_rewrite cheat sheet, daar kan je veel uithalen.

[ Voor 16% gewijzigd door AtleX op 02-05-2007 13:54 ]

Sole survivor of the Chicxulub asteroid impact.


Acties:
  • 0 Henk 'm!

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 19:47

TeeDee

CQB 241

Sgrovert schreef op woensdag 02 mei 2007 @ 13:13:
Het rewriten is me gelukt. Alleen rewrite hij momenteel iets teveel. Door het rewriten, kan de stylesheet ook niet meer geladen worden. Daarnaast staan er een aantal php-bestanden op de schijf die wel normaal geladen moeten worden.
Kijk eens naar het base element?

Heart..pumps blood.Has nothing to do with emotion! Bored


Acties:
  • 0 Henk 'm!

  • Sgrovert
  • Registratie: Mei 2004
  • Laatst online: 17:19
Voutloos schreef op woensdag 02 mei 2007 @ 13:52:
Het is belangrijk om goede URLs te hebben, en niet URLs waar je binnen de korste keren van baalt zodat je eigenlijk op een andere benaming wil overstappen. Denk nou dus gewoon eerst na hoe je het wil indelen, kijk dan gewoon goed naar multiview & co en pas helemaal aan het eind van de rit moet je bepalen wat je doet bij een file not found error.
Dat weet ik. Alleen moet de site waar ik aan bezig ben straks door meerdere mensen bewerkt gaan worden. Deze mensen hebben niet allemaal evenveel verstand van ftp en opmaak van bestanden. Daarom wil ik deze mensen geen ftp toegang tot de server geven. Maar omdat ze wel nieuwe pagina's aan moeten kunnen maken, moest ik op een andere manier informatie uit de URL halen. Daarnaast is het zo opgezet dat mensen niks aan het design van de site aan kunnen passen, en menu-links automatisch aangemaakt worden, als een pagina in het menu erbij moet komen te staan.
Verder wilde ik wel zelf de mogelijkheid houden om even snel een pagina via de ftp te uploaden, die gewoon direct weergegeven wordt.

Om dit alle voor elkaar te krijgen heb ik alle verkeer naar index.php door laten verwijzen en daar verder uit te zoeken welke content geladen moet worden. Op het moment dat uit de URL niet opgemaakt kan worden welke content weergegeven moet worden kan ik altijd nog een error pagina tonen.

Op het moment werkt alles zoals de bedoeling is dankzei de code van AtleX

Lost In Music

Pagina: 1