Input filteren vraagje
Ik heb een review website waar men beoordelingen kan plaatsen voor websites maar ook voor bedrijven (restaurants, verenigingen, sportscholen etc etc)....
Nu heb ik 1 zoekveld waar men dus op van alles kan zoeken.
Hoe zorg ik ervoor dat ik de originele naam goed op kan slaan, bijv: Bord'Eau (Hotel De L'Europe Amsterdam) of The Good Companion | Fish & Chips.
In deze zoekopdracht zitten er qoutes, spaties en & tekens tussen. Dit wil ik ook zo opslaan maar in de url moeten al die vreemde karakters vervangen worden door een -(dash).
Mijn vraag is dus hoe kan ik deze speciale karakters opslaan in mijn database en vervolgens correct weergeven in de url.
Voorbeeld website welke dit goed toepast is: https://www.iens.nl/restaurant+amsterdam In de resultaten staat de naam zoals het hoort en als je op een resaurant klikt zie je in de url alles netjes gevalideerd.
Ik hoop dat iemand mij dit kan uitleggen.
Mvg
Anyway als eerste moet je je .htaccess bestand zo instellen dat alle requests die niet bestaan en normaal direct een 404 Not Found foutmelding zouden geven nu naar één en dezelfde php script wijzen. Meestal wordt hier gewoon index.php voor gebruikt.
Stel je hebt twee php bestanden in je root, namelijk index.php en contact.php
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
( ---> betekent "gaat naar" )
https://www.iens.nl/ ---> index.php
https://www.iens.nl/index.php ---> index.php [bestaat werkelijk]
https://www.iens.nl/restaurant+amsterdam ---> index.php
https://www.iens.nl/cafe+bolle+jan ---> index.php
https://www.iens.nl/contact.php ---> contact.php [bestaat werkelijk]
https://www.iens.nl/ ---> index.php
https://www.iens.nl/index.php ---> index.php [bestaat werkelijk]
https://www.iens.nl/restaurant+amsterdam ---> index.php
https://www.iens.nl/cafe+bolle+jan ---> index.php
https://www.iens.nl/contact.php ---> contact.php [bestaat werkelijk]
Als tweede moet je een functie hebben die een normale tekst met allerlei karakters omzet naar een slug.
Ik vertel je natuurlijk niet dat je hier een hele goede vindt :-)
Ten derde zul je moeten nadenken over het feit dat je moet voorkomen dat twee entiteiten dezelfde slug gaan gebruiken. Immers "côte" zal hetzelfde opleveren als "cote" als die door de slugifier gehaald wordt.
Om bovenstaande reden kies ik er altijd voor om een extra kolom in de database tabel aan te maken met de naam "slug" waarop ik een unique constraint loslaat zodat het onmogelijk wordt om er twee dezelfde slugs in te zetten.
Als laatste kun je in je index.php een routine maken die de slug uit de URL pulkt en dan aan de hand van de gevonden slug de bijbehorende gegevens uit de database tovert en ophoest.
Overigens kun je dubbele slugs ook toelaten als je tevens het ID in de URL zet. Dat zie je hier in PHPhulp ook, kijk maar in je URLbalk. Jouw topic heeft id 101752. dan zoek je dus gewoon op id ipv op slug
Toevoeging op 07/11/2017 23:37:44:
Overigens zou ik liggende streepjes gebruiken ( - ) in plaats van plus tekens ( + )
Frank Nietbelangrijk op 07/11/2017 23:36:54:
Jij wilt slugs gebruiken. Het is best een hele stap als je nog niet met een framework en dus met controllers werkt.
Dat valt nog wel mee zonder framework, hoor. Ik heb het pas nog bij een site ingebouwd die geen framework had. ;-)
https://www.iens.nl/restaurant+amsterdam.
Overweeg om daar iets van te maken als https://www.iens.nl/accomodations/restaurant+amsterdam
Dan kun je namelijk nog zonder problemen een https://www.iens.nl/contact en een https://www.iens.nl/about maken.
Want anders kunnen er twee dingen gebeuren afhankelijk hoe je de zaak opzet.
1) er zal een dan naar een accommodation gezocht worden die 'contact' of 'about' heeft als slug en de contact en about pagina zullen daardoor onbereikbaar worden
2) Je script kijkt eerst of 'contact' en 'about' misschien voor iets anders dienen en gaat in dat geval wat anders doen dan een accommodatie zoeken. Dat werkt op zich wel maar heeft weer als nadeel dat als iemand een accommodatie aanmaakt in de database die "Contact" heet heel vertwijfeld zal kijken als hij daarna op de contact pagina uitkomt in plaats van op een pagina die zijn accommodatie laat zien ..
Hoop dat ik een klein beetje duidelijk ben geweest ;-)
Toevoeging op 07/11/2017 23:48:07:
Dat kun je wel zeggen Ariën maar je zult dan toch wel een paar uitdagingen moeten aangaan zoals het schrijven van een soort van frontcontroller en het aanmaken van een .htaccess bestand.
Ik vindt het persoonlijk een beetje het verschil tussen een kast van de meubelzaak en plankjes en onderdelen halen bij de Gamma ;-) En laten we het erop houden dat je bij de meubelzaak een grotere kans hebt op een mooie degelijke kast netjes bij jou thuis afgeleverd
Ook stel jij als voorbeeld deze url: Overweeg om daar iets van te maken als https://www.iens.nl/accomodations/restaurant+amsterdam
Dan kun je namelijk nog zonder problemen een https://www.iens.nl/contact en een https://www.iens.nl/about maken.
Want anders kunnen er twee dingen gebeuren afhankelijk hoe je de zaak opzet.
1) er zal een dan naar een accommodation gezocht worden die 'contact' of 'about' heeft als slug en de contact en about pagina zullen daardoor onbereikbaar worden
2) Je script kijkt eerst of 'contact' en 'about' misschien voor iets anders dienen en gaat in dat geval wat anders doen dan een accommodatie zoeken. Dat werkt op zich wel maar heeft weer als nadeel dat als iemand een accommodatie aanmaakt in de database die "Contact" heet heel vertwijfeld zal kijken als hij daarna op de contact pagina uitkomt in plaats van op een pagina die zijn accommodatie laat zien ..
Hoop dat ik een klein beetje duidelijk ben geweest ;-)
Toevoeging op 07/11/2017 23:48:07:
- Ariën - op 07/11/2017 23:40:17:
Dat valt nog wel mee zonder framework, hoor. Ik heb het pas nog bij een site ingebouwd die geen framework had. ;-)
Frank Nietbelangrijk op 07/11/2017 23:36:54:
Jij wilt slugs gebruiken. Het is best een hele stap als je nog niet met een framework en dus met controllers werkt.
Dat valt nog wel mee zonder framework, hoor. Ik heb het pas nog bij een site ingebouwd die geen framework had. ;-)
Dat kun je wel zeggen Ariën maar je zult dan toch wel een paar uitdagingen moeten aangaan zoals het schrijven van een soort van frontcontroller en het aanmaken van een .htaccess bestand.
Ik vindt het persoonlijk een beetje het verschil tussen een kast van de meubelzaak en plankjes en onderdelen halen bij de Gamma ;-) En laten we het erop houden dat je bij de meubelzaak een grotere kans hebt op een mooie degelijke kast netjes bij jou thuis afgeleverd
Gewijzigd op 07/11/2017 23:51:51 door Frank Nietbelangrijk
Een kwestie om daar te kijken of de slug bestaat, en zo niet deze toevoegen aan de URL met een location header.
Anyway, de class die ik erbij gebruik:
Code (php)
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
<?php
class Slug {
public function create($str, $options = array()) {
// Make sure string is in UTF-8 and strip invalid UTF-8 characters
$str = mb_convert_encoding((string)$str, 'UTF-8', mb_list_encodings());
$defaults = array(
'delimiter' => '-',
'limit' => null,
'lowercase' => true,
'replacements' => array(),
'transliterate' => false,
);
// Merge options
$options = array_merge($defaults, $options);
$char_map = array(
// Latin
'À' => 'A', 'Á' => 'A', 'Â' => 'A', 'Ã' => 'A', 'Ä' => 'A', 'Å' => 'A', 'Æ' => 'AE', 'Ç' => 'C',
'È' => 'E', 'É' => 'E', 'Ê' => 'E', 'Ë' => 'E', 'Ì' => 'I', 'Í' => 'I', 'Î' => 'I', 'Ï' => 'I',
'Ð' => 'D', 'Ñ' => 'N', 'Ò' => 'O', 'Ó' => 'O', 'Ô' => 'O', 'Õ' => 'O', 'Ö' => 'O', '?' => 'O',
'Ø' => 'O', 'Ù' => 'U', 'Ú' => 'U', 'Û' => 'U', 'Ü' => 'U', '?' => 'U', 'Ý' => 'Y', 'Þ' => 'TH',
'ß' => 'ss',
'à' => 'a', 'á' => 'a', 'â' => 'a', 'ã' => 'a', 'ä' => 'a', 'å' => 'a', 'æ' => 'ae', 'ç' => 'c',
'è' => 'e', 'é' => 'e', 'ê' => 'e', 'ë' => 'e', 'ì' => 'i', 'í' => 'i', 'î' => 'i', 'ï' => 'i',
'ð' => 'd', 'ñ' => 'n', 'ò' => 'o', 'ó' => 'o', 'ô' => 'o', 'õ' => 'o', 'ö' => 'o', '?' => 'o',
'ø' => 'o', 'ù' => 'u', 'ú' => 'u', 'û' => 'u', 'ü' => 'u', '?' => 'u', 'ý' => 'y', 'þ' => 'th',
'ÿ' => 'y',
// Latin symbols
'©' => '(c)', '®' => '(r)','€' => 'euro'
);
// Make custom replacements
$str = preg_replace(array_keys($options['replacements']), $options['replacements'], $str);
// Transliterate characters to ASCII
if ($options['transliterate']) {
$str = str_replace(array_keys($char_map), $char_map, $str);
}
// Replace non-alphanumeric characters with our delimiter
$str = preg_replace('/[^\p{L}\p{Nd}]+/u', $options['delimiter'], $str);
// Remove duplicate delimiters
$str = preg_replace('/(' . preg_quote($options['delimiter'], '/') . '){2,}/', '$1', $str);
// Truncate slug to max. characters
$str = mb_substr($str, 0, ($options['limit'] ? $options['limit'] : mb_strlen($str, 'UTF-8')), 'UTF-8');
// Remove delimiter from ends
$str = trim($str, $options['delimiter']);
return $options['lowercase'] ? mb_strtolower($str, 'UTF-8').'.html' : $str.'.html';
}
}
?>
class Slug {
public function create($str, $options = array()) {
// Make sure string is in UTF-8 and strip invalid UTF-8 characters
$str = mb_convert_encoding((string)$str, 'UTF-8', mb_list_encodings());
$defaults = array(
'delimiter' => '-',
'limit' => null,
'lowercase' => true,
'replacements' => array(),
'transliterate' => false,
);
// Merge options
$options = array_merge($defaults, $options);
$char_map = array(
// Latin
'À' => 'A', 'Á' => 'A', 'Â' => 'A', 'Ã' => 'A', 'Ä' => 'A', 'Å' => 'A', 'Æ' => 'AE', 'Ç' => 'C',
'È' => 'E', 'É' => 'E', 'Ê' => 'E', 'Ë' => 'E', 'Ì' => 'I', 'Í' => 'I', 'Î' => 'I', 'Ï' => 'I',
'Ð' => 'D', 'Ñ' => 'N', 'Ò' => 'O', 'Ó' => 'O', 'Ô' => 'O', 'Õ' => 'O', 'Ö' => 'O', '?' => 'O',
'Ø' => 'O', 'Ù' => 'U', 'Ú' => 'U', 'Û' => 'U', 'Ü' => 'U', '?' => 'U', 'Ý' => 'Y', 'Þ' => 'TH',
'ß' => 'ss',
'à' => 'a', 'á' => 'a', 'â' => 'a', 'ã' => 'a', 'ä' => 'a', 'å' => 'a', 'æ' => 'ae', 'ç' => 'c',
'è' => 'e', 'é' => 'e', 'ê' => 'e', 'ë' => 'e', 'ì' => 'i', 'í' => 'i', 'î' => 'i', 'ï' => 'i',
'ð' => 'd', 'ñ' => 'n', 'ò' => 'o', 'ó' => 'o', 'ô' => 'o', 'õ' => 'o', 'ö' => 'o', '?' => 'o',
'ø' => 'o', 'ù' => 'u', 'ú' => 'u', 'û' => 'u', 'ü' => 'u', '?' => 'u', 'ý' => 'y', 'þ' => 'th',
'ÿ' => 'y',
// Latin symbols
'©' => '(c)', '®' => '(r)','€' => 'euro'
);
// Make custom replacements
$str = preg_replace(array_keys($options['replacements']), $options['replacements'], $str);
// Transliterate characters to ASCII
if ($options['transliterate']) {
$str = str_replace(array_keys($char_map), $char_map, $str);
}
// Replace non-alphanumeric characters with our delimiter
$str = preg_replace('/[^\p{L}\p{Nd}]+/u', $options['delimiter'], $str);
// Remove duplicate delimiters
$str = preg_replace('/(' . preg_quote($options['delimiter'], '/') . '){2,}/', '$1', $str);
// Truncate slug to max. characters
$str = mb_substr($str, 0, ($options['limit'] ? $options['limit'] : mb_strlen($str, 'UTF-8')), 'UTF-8');
// Remove delimiter from ends
$str = trim($str, $options['delimiter']);
return $options['lowercase'] ? mb_strtolower($str, 'UTF-8').'.html' : $str.'.html';
}
}
?>
Gewijzigd op 08/11/2017 00:09:00 door - Ariën -
Anders blijf je bezig met "uitzonderingen" toevoegen (maar dus niet zo'n mooie 'euro' vervanger ;-) ).
@Ariën: zoals je 'm hier geplakt hebt wordt het vraagteken ("?") door een aantal letters vervangen ("u" en "o", ook upper - maar effectief dus allemaal hoofdletter "O"). Is daar in de copy+paste/UTF8 iets mis gegaan?
De rest van m'n slugifier is ook een stuk simpeler:
In plaats van die waslijst met vervangingen gebruik ik:@Ariën: zoals je 'm hier geplakt hebt wordt het vraagteken ("?") door een aantal letters vervangen ("u" en "o", ook upper - maar effectief dus allemaal hoofdletter "O"). Is daar in de copy+paste/UTF8 iets mis gegaan?
De rest van m'n slugifier is ook een stuk simpeler:
Code (php)
1
2
2
$str = str_replace(["'",'"'],'',iconv('UTF-8','ASCII//TRANSLIT//IGNORE',$str));
return strtolower(trim(preg_replace('/\\W+/',$delimiter,$str),$delimiter));
return strtolower(trim(preg_replace('/\\W+/',$delimiter,$str),$delimiter));
Gewijzigd op 08/11/2017 08:10:56 door Rob Doemaarwat
Die vraagtekens zitten ook in mijn code. Dus ergens is het mis gegaan in het begin :X
Thanks voor de 'heads up'.
Ik maak helaas geen gebruik van een framework en heb de controller zelf geschreven.
Om het voor mezelf makkelijk te houden heb ik besloten om de input altijd op dezelfde manier te valideren door middel van deze functie:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
<?php
function seo_friendly_url($string){
$string = str_replace(array('[\', \']'), '', $string);
$string = preg_replace('/\[.*\]/U', '', $string);
$string = preg_replace('/&(amp;)?#?[a-z0-9]+;/i', '-', $string);
$string = htmlentities($string, ENT_COMPAT, 'utf-8');
$string = preg_replace('/&([a-z])(acute|uml|circ|grave|ring|cedil|slash|tilde|caron|lig|quot|rsquo);/i', '\\1', $string );
$string = preg_replace(array('/[^a-z0-9]/i', '/[-]+/') , '-', $string);
return strtolower(trim($string, '-'));
}
?>
function seo_friendly_url($string){
$string = str_replace(array('[\', \']'), '', $string);
$string = preg_replace('/\[.*\]/U', '', $string);
$string = preg_replace('/&(amp;)?#?[a-z0-9]+;/i', '-', $string);
$string = htmlentities($string, ENT_COMPAT, 'utf-8');
$string = preg_replace('/&([a-z])(acute|uml|circ|grave|ring|cedil|slash|tilde|caron|lig|quot|rsquo);/i', '\\1', $string );
$string = preg_replace(array('/[^a-z0-9]/i', '/[-]+/') , '-', $string);
return strtolower(trim($string, '-'));
}
?>
Als men dus op iets zoekt met vreemde tekens zoals & of () dan zetten we dit om in dashes en vervangen we de dashes met spaties als we het in de database opslaan, zo kan men er nog steeds goed op zoeken.
Wellicht is het toch mooier om nog een tabel te maken in de database met de echte originele naam waar men op zocht en daar aan de seo-url koppelen welke we dan in de url weergeven maar op de pagina zelf de originele naam...?
Gewijzigd op 08/11/2017 11:06:32 door Furio Scripting
De slug kan worden gegenereerd op grond van de oorspronkelijke naam. En misschien is het ook handig dat je op de slug-kolom een index zet voor snelle lookup, volgens mij kwam ik dit niet tegen in de bovenstaande verhalen.
De uitdaging zit hem niet zozeer in het vinden van een slug-functie maar meer hoe je deze URLs indeelt. Dit zou je ook op plaatsnaam kunnen doen? En wat als een restaurant meerdere filialen heeft? Dan wil je die toch niet appie, appie-1, appie-2 et cetera noemen? Oftewel, hoe je dit indeelt hangt helemaal af van het soort data wat je probeert te organiseren. Denk daar eerst eens over na, implementatie is toch echt de laatste stap.
De functie hierboven (seo_friendly_url) werkt overigens met blacklists (niet toegestane karakterreeksen). Dit lijkt mij geen handige strategie.
Wat ik wel een beetje opmaak uit het verhaal van @Furio is dat nog niet echt heel uitgebreid is nagedacht over welke verschillende pagina's deze site gaat bevatten? Als je hier nou eerst eens wat schetsen van maakt hoe je dit schematisch indeelt, dan volgen hier volgens mij vanzelf de specificaties uit van welke data je nodig hebt en hoe je dit dan vervolgens (EDIT database-technisch) organiseert rolt er ook redelijk vanzelfsprekend uit. Begin dus eens met een functioneel ontwerp, los van technische oplossingen. Uit welke pagina's bestaat de site, hoe navigeer en zoek je hier doorheen et cetera.
Gewijzigd op 08/11/2017 16:55:22 door Thomas van den Heuvel
Bedankt voor je input! Ik heb redelijk goed nagedacht hoe het platform eruit moet komen te zien.
Het platform moet gebruikt worden om voor ieder bedrijf,restaurant,website etc beoordelingen te kunnen verzamelen.
Gebruiker kan zelf op iets zoeken zoals: "Restaurant de beren".
Gebruiker kan via de google places api zoeken op een "establishment" (restaurants,verenigingen etccc).
Nu kijk ik nadat een gebruiker wat invoert of dit exact overeenkomt in mijn database, zo niet zoek op iets waar het op kan lijken. Bij geen resultaat slaan we zijn zoekopdracht op in de bedrijven tabel (bedrijfsnaam, seo_url).
De urls heb ik zo in gedachte:
website.nl/beoordelingen/seo_url (als er geen website bekend is die gekoppeld is aan dit bedrijf).
website.nl/beoordelingen/seo_url/websiteurl (als er tevens een website gekoppeld is aan het bedrijf).
Nu krijg ik vanuit de google api tevens categorieen mee zoals restaurant,slager,bakker etc... Dit sla ik ook op maar is niet altijd bekend.
In de toekomst als ik genoeg bedrijven heb waar de categorie van bekend is zal de url bijv gaan worden: website.nl/beoordelingen/restaurant/seo_url
Maar voor nu wil ik enkel de bedrijfsnaam,website in de url weergeven zodat als men googled op bedrijfsnaam of website naam mijn platform naar boven komt.
Ik had nog nooit gehoord van een slug maar dit heeft mij wel doen besluiten om dit als seo_url op te slaan en daarmee te werken.
Voor mijn gevoel is het in theorie prima opgezet en ben nu in de fase waarin ik dit allemaal werkend wil krijgen, met jullie adviezen gaat mij dit prima lukken denk ik.
Daarvoor wil ik iedereen bedanken en mochten er nog opmerkingen zijn om mijn aanpak te verbeteren dan lees ik dit heel graag!
Het idee om een website URL op te nemen... weet niet of dat nou zo handig is? Dat wordt dan /mcdonalds/www.mcdonalds.nl? Beetje dubbelop niet? Als je op een detailpagina van een bedrijf/restaurant komt kun je toch ook wel wat adresgegevens weergeven, met een Google mapje enzo, en routes / adresgegevens naar de verschillende filialen? Wanneer die pagina's geindexeerd gaan worden door zoekmachines kom je op den duur ook wel uit op de detailpagina.
Mogelijk wil je dat (filiaal) weer wel opnemen in de URL: /mcdonals/den-bosch. Of keer je dit om: eerst de plaatsnaam en dan een bedrijf, ongeacht de categorie (dat is dan enkel een filter in je zoekfunctionaliteit en een eigenschap van het filiaal): /den-bosch/mcdonalds. Of je doet beide, zodat je van grof naar fijn kunt: /restaurant/den-bosch/mcdonalds, of je wilt dit toch in eerste instantie organiseren op plaats: /den-bosch/restaurant/mcdonalds. Elke subdirectory beantwoordt dan al een vraag: WAAR is dit gesitueerd, WAT is de categorie, WAT is de naam van de instelling.
Dit is makkelijk bedacht en alle opties zijn eigenlijk wel logisch maar dit heeft een enorme impact op de organisatie van je pagina's en de opbouw van de URL en alles eromheen. Daarom is het belangrijk dat je hier veel tijd aan besteed en hier echt goed over nadenkt.
Quote:
In de toekomst als ik genoeg bedrijven heb waar de categorie van bekend is zal de url bijv gaan worden: website.nl/beoordelingen/restaurant/seo_url
Maar dan ben je ook je eerdere indexering kwijt. Het lijkt mij beter om alle informatie meteen op de goede plek te zetten? Of richt je URLs zo in dat dit "niet uitmaakt" waar deze staan. Hier bedoel ik mee: kijk naar dit forum, in de URL is ook niet verwerkt welk subforum het betreft maar dit is iets wat de interne navigatie van je site verder regelt. Dit houdt ook in dat als je dan een keer ontevreden bent over de indeling of hier naar aanleiding van voortschrijdend inzicht veranderingen in aan wilt brengen dat je niet met handen en voeten gebonden bent door de gekozen vorm van de URL. Je hoeft dan enkel de (interne) navigatielaag aan te passen zonder de "fysieke locatie" (lees: de URL) aan te passen. Je zou dus kunnen volstaan met /<locatie>/<naam bedrijf> en dat de interne navigatie dit verder categoriseert in restaurants, bedrijven et cetera.
Misschien is dat dan nog een puntje: denk na over welke categorieën / rubrieken je wilt hebben op je site? Of liever gezegd: uit welke dimensies (of kenmerken) zijn de (subdirectories) opgebouwd en welke waarden kunnen deze hebben.
Ook zou je kunnen nadenken over hoe mensen de site gaan gebruiken. Misschien gebruikt iemand bijvoorbeeld deze site wel om een goed vegetarisch restaurant in Den Bosch te vinden?
Gewijzigd op 09/11/2017 01:56:20 door Thomas van den Heuvel
Thomas van den Heuvel op 09/11/2017 01:45:01:
Maar dan ben je ook je eerdere indexering kwijt. Het lijkt mij beter om alle informatie meteen op de goede plek te zetten?
Quote:
In de toekomst als ik genoeg bedrijven heb waar de categorie van bekend is zal de url bijv gaan worden: website.nl/beoordelingen/restaurant/seo_url
Maar dan ben je ook je eerdere indexering kwijt. Het lijkt mij beter om alle informatie meteen op de goede plek te zetten?
Dat kan wel, maar je moet daarvoor dan een 301 Moved Permanently inbouwen. Dat betekent dus dat je een systeem met een geheugen nodig hebt dat ook verouderde URL's blijft ondersteunen.
Lastig van rubriceren via URL's met attributen is dat veel 'entiteiten' in meer dan één rubriek passen omdat ze meer dan één attribuut hebben. Denk bijvoorbeeld aan een visrestaurant dat ook een goed gevulde vegetarische menukaart heeft.
Ward van der Put op 09/11/2017 11:49:20:
Dat kan wel, maar je moet daarvoor dan een 301 Moved Permanently inbouwen. Dat betekent dus dat je een systeem met een geheugen nodig hebt dat ook verouderde URL's blijft ondersteunen.
Uiteraard kan dat, maar dat lijkt mij nogal omslachtig omdat je dan een hele hoop historie bij moet gaan houden. Het is makkelijk om iets moeilijk te maken en het is moeilijk om iets makkelijk te houden :).
Verandering is de enige constante.
Reden te meer om neutrale URLs te verzinnen en enige verandering ergens anders af te handelen (navigatielaag in de applicatie) wat het inhoudelijk veranderen van genoemde URLs overbodig maakt.