Alternatief voor ?id=1 in je URL - RESTful en slug routing in PHP – tutorial
Gepubliceerd: 22.07.2025
Zoek je een SEO-vriendelijk alternatief voor oude URL’s zoals pagina.php?id=1
? Leer in deze tutorial hoe je in PHP en Symfony overstapt naar RESTful en slug-gebaseerde URL’s.
RESTful URL’s met slugs zijn leesbaar, vindbaar en schaalbaar. In deze tutorial leer je met voorbeelden hoe je dit toepast in PHP én Symfony met Sluggable-extensie.
Een ID is een uniek getal in een database, bijvoorbeeld id=1
. Hiermee roep je een specifiek item op. Functioneel, maar niet gebruiksvriendelijk of goed voor SEO.
REST staat voor Representational State Transfer. Het is een architectuurstijl waarbij URL’s betekenisvol zijn:
/posts
– alle blogposts/posts/42
– post met ID 42/posts/42/vegan-pasta
– post met slug
RESTful betekent dus: duidelijke, voorspelbare en goed gestructureerde URLs.
Waarom zijn slugs beter dan ID’s?
- Leesbaarheid: Mensen begrijpen meteen waar de pagina over gaat.
- SEO: Zoekmachines herkennen keywords in je URL.
- Redirects: Verkeerde slug? Gebruik een 301-redirect.
Oude aanpak (met id)
<?php
$id = $_GET['id'];
$post = findPostById($id);
echo $post['title'];
?>
Nieuwe aanpak (RESTful + slug)
<?php
$request = $_SERVER['REQUEST_URI'];
$parts = explode('/', trim($request, '/'));
$id = (int) $parts[1];
$slug = $parts[2] ?? '';
$post = getPostById($id);
if ($slug !== $post['slug']) {
header("Location: /posts/{$id}/{$post['slug']}", true, 301);
exit;
}
echo $post['title'];
?>
Slug genereren in PHP
function makeSlug($string) {
$slug = strtolower(trim($string));
$slug = preg_replace('/[^a-z0-9]+/', '-', $slug);
return trim($slug, '-');
}
echo makeSlug("Vegan Pasta Recept"); // vegan-pasta-recept
Gebruik je Symfony + Doctrine? Dan kun je met Gedmo Sluggable automatisch slugs genereren uit titels.
use Gedmo\Mapping\Annotation as Gedmo;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
*/
class Post {
/** @ORM\Column(type="string") */
private $title;
/**
* @Gedmo\Slug(fields={"title"})
* @ORM\Column(length=128, unique=true)
*/
private $slug;
}
Symfony genereert automatisch de slug en vult het veld bij het opslaan van de entity.
Voordelen op een rij
- ✅ SEO-vriendelijk
- ✅ Duidelijke en nette URL-structuur
- ✅ Ondersteund door frameworks zoals Symfony en Laravel
- ✅ Gemakkelijk te redirecten bij slug-updates