get nodig?
Als je werkt met "mooie" routes, bijv. www.mijnsite.nl/contact (in plaats van www.mijnsite.nl/index.php?page=contact) heb je dan eigenlijk nog ergens $_GET variabelen nodig???
Ik neem aan dat je dan toch alles met mooie routes doet, en dat je $_GET niet meer gebruikt?
Stel dat je een routebeschrijving wil geven naar je kantoor, dan doe je toch dit:
www.mijnsite.nl/contact/routebeschrijving/kantoor
en niet dit
www.mijnsite.nl/contact/routebeschrijving?location=kantoor
Kortom... heb ik nog wel $_GET data nodig als ik mooie routes gebruik?
nee, met user-friendly-URIs heb je die dan niet (perse) nodig.
Oké, thanks.
http://www.phphulp.nl/php/tutorial/overig/url-vriendelijkheid-seo/691/van-n-naar-oneindig/1811/
In deze tutorial wordt alles herleid tot 1 GET variabele
Wat jij nu best doet, is een logica steken in je url's
bv. voor een foto uit een album?
mijnsite.com/fotos/25/126 => pagina=fotos, album=25, foto=126
Op zo'n manier dat je altijd aan de plaats van de variabele ziet waarvoor hij dient.
Ik begrijp hoe het werkt met het maken van routes. Dat heb ik wel eens eerder gedaan. Maar ik zat dus te denken of het wel of niet slim is om $_GET variabelen helemaal uit te schakelen. Als ik via de $_SERVER global $_SERVER['REQUEST_URI'] opvraag, dan krijg ik alles wat na mijnsite.nl/ komt, inclusief $_GET variabelen.
Ik vraag me dus echt af of ik überhaupt nog $_GET variabelen nodig heb als ik mooie routes gebruik. Stel dat ik $_GET variabelen toesta, dan zou iemand die kwaad wil een link op een forum naar mijn website kunnen plaatsen als volgt:
www.mijnsite.nl/contact?dit=een_enorm_stomme_website
Als ik nu de $_SERVER['REQUEST_URI'] opvraag, dan krijg ik als route "contact?dit=een_enorm_stomme_website". Deze route bestaat niet, dus toon ik een 404 pagina. Stel dat ik voor de route een $_GET variabele gebruik, bijvoorbeeld $_GET['page'], dan zou ik als route alleen "contact" krijgen. Het lijkt dus alsof de route klopt, en de contactpagina wordt gewoon weergegeven.
Dus nu dacht ik, als ik dan toch gebruik maak van mooie routes dan kan ik net zo goed de $_GET variabelen helemaal uitschakelen. Alleen vraag ik me af of ik mezelf daarmee in de vingers zou kunnen snijden.
Kan iemand een situatie bedenken waardoor ik toch ineens $_GET variabelen nodig zou hebben?
Daarnaast snap ik je voorbeeld ook niet. Of je nu GET 'uitschakelt' of niet, iemand kan nog steeds die link bouwen. Aangezien het domein klopt zal die link ook bij jouw server uitkomen en of je nu wel of niet die GET waardes uitleest, je zal nog steeds op dezelfde manier de aanvraag moeten behandelen. Met of zonder die extra waarde in een get parameter zou je ook tot dezelfde conclusie moeten komen in je pagina servering. Je gaat namelijk geen get parameters behandelen die je niet verwacht.
Wat betreft je 2e opmerking. Ja, iemand kan nog steeds een $_GET parameter erin verwerken, maar wat ik bedoel is... als ik geen $_GET parameters gebruik, kan ik bijv. alles waar een $_GET parameter in voorkomt (en dus niet bestaat) redirecten naar de homepage (of een 404 page). Snap je?
Waarom zou je alles waar een GET parameter al in voorkomt al direct bij het grofvuil zetten? Je negeert gewoon wat je niet nodig hebt. In mijn ogen is het veel vriendelijker om een zo goed mogelijke pagina te serveren dan direct een 404 als er 1 karakter in de (verder goede) url staat die je niet kan gebruiken. Maar dat is een mening uiteraard :-)
site.com/contact/routebeschrijving/kantoor
wordt dus omgezet naar
site.com/index.php?q=contact/routebeschrijving/kantoor
Dus $_GET['q'] = 'contact/routebeschrijving/kantoor'
en zolang ik geen andere $_GET in mijn code zet, kan het mij niet schelen wat de gebruiker verder in zijn url schrijft.
Dat probleem met $_SERVER['REQUEST_URI']:
Wel, ik zou $_SERVER['REQUEST_URI'] nooit nodig hebben, want $_SERVER['REQUEST_URI'] komt bij mij overeen met
'site.com/index.php?q=' . $_GET['q']
Gewijzigd op 18/02/2013 12:01:26 door Kris Peeters
Oh, overigens nog een reden om GET niet uit te schakelen. Als je een form gebruikt met als method GET, dan kan je dat niet automatisch laten omschrijven. Het eerste request komt server side altijd als een normal url met GET parameters aan. Je kan dat eerste request wel direct redirecten naar een mooie url, maar die redirect moet je wel eerst goed afhandelen.
mijnsite.nl/fotoalbum/10/foto/3?dezevrouw=gruwelijklelijk
Om maar eens een voorbeeldje te noemen :-)))
Stel dat ik de $_GET variabelen zou uitschakelen, dan zou deze route niet herkend worden, en zou dus een 404 pagina worden getoond.
Ik zit me nu te bedenken... ik zou wel optioneel kunnen aangeven of bij een route wel of niet $_GET variabelen mogen worden gebruikt. In bovengenoemd voorbeeld, als er geen $_GET variabelen mogen worden gebruikt, maar dit toch gebeurt, zou ik de pagina opnieuw kunnen aanroepen zonder $_GET variabelen. Da's misschien wel een idee.
Wat betreft jouw laatste opmerking... je zou toch alles via "post" kunnen versturen? Of zie ik iets over het hoofd nu?
@Kris: ik snap wat je bedoelt, maar op jouw site kan dus iemand dit doen:
site.com/contact/routebeschrijving/kantoor?kris=eenschavuit
:-)
En dan wordt de juiste pagina gewoon getoond.
Gewijzigd op 18/02/2013 12:16:14 door Ozzie PHP
Ozzie PHP op 18/02/2013 12:15:51:
Wat betreft jouw laatste opmerking... je zou toch alles via "post" kunnen versturen? Of zie ik iets over het hoofd nu?
Ja natuurlijk kan dat (hoewel je dan wel voorbij gaat aan waarom die twee methodes eigenlijk bestaan), maar volgens mij is het een beetje het paard achter de wagen spannen nu. Want wil je nu eigenlijk bereiken? Dat iemand 'mijnsite.nl/fotoalbum/10/foto/3?dezevrouw=gruwelijklelijk' niet kan posten op een forum? Dat kan jij toch niet voorkomen (al was het maar omdat die persoon dan dit als tekst zou kunnen hebben en als url via de bbcode alsnog de correcte url kan geven).
Zoals ik al eerder zei, voor elk request zal je toch moeten bekijken welke input (GET, POST, COOKIE etc) je hebt en welke input je nodig hebt. Alle junk gebruik je gewoon niet.
Offtopic:
Als ik een formulier verzendt via GET, dan krijg je toch altijd lelijke URLs? Zoiets als mijnsite.nl/?product=auto&merk=ford&kleur=blauw&deuren=5&airco=ja
Zoiets kun je toch niet echt omschrijven naar een mooie URL, of wel?
[/offctopic]
Klopt. Het url uit het form is altijd de 'lelijke' versie, dat kan je niet veranderen. Wat je wel kan doen is serverside direct een redirect uitvoeren (via een header() call), zodat de gebruiker direct doorgaat naar de 'mooie' url. Voor een voorbeeldje (met excuses voor het pluggen): http://erwinsdump.site50.net/wronline/list/
Selecteer een land en klik op de knop. De url waar je dan naar toe gaat is iets als http://erwinsdump.site50.net/wronline/red_index.php?edPage=1002&edCountry=albania&edState=
Maar dat krijg je zelf niet eens te zien in de url bar.
(p.s. je scherm is te breed... ik krijg een horizontale scrollbar)