URL Vriendelijkheid (SEO)

Door Jesper Diovo, 12 jaar geleden, 9.884x bekeken

Hoe maak je URL vriendelijk, netjes en toonbaar.

Gesponsorde koppelingen

Inhoudsopgave

  1. Inleiding
  2. Hoe ziet de URL eruit?
  3. Mod_rewrite
  4. Van één naar oneindig
  5. Afsluiting en bronnen

 

Er zijn 34 reacties op 'Url vriendelijkheid seo'

PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Gerben G
Gerben G
12 jaar geleden
 
0 +1 -0 -1
Leuke tutorial. Maar waarom gebruik je php en Mod rewrite? Je kunt namelijk hetzelfde bereiken met alleen modrewrite.
Steen
steen
12 jaar geleden
 
0 +1 -0 -1
Persoonlijk ben ik ook voorstander van deze manier (het gebruik van PHP) omdat je op deze manier niet bent gebonden aan statische regels in de htaccess.
Karl Karl
Karl Karl
12 jaar geleden
 
0 +1 -0 -1
Sowieso is deze manier handiger denk ik. Als je je site wilt omgooien (speciale pagina toevoegen o.i.d.), dan hoef je niet de hele .htaccess om te gooien, maar dan kan je dat lekker door php laten afhandelen. Als je het door php laat doen, heb je veel meer vrijheid.
Mark PHP
Mark PHP
12 jaar geleden
 
0 +1 -0 -1
Aardige tutorial, maar er zijn nog een aantal verbeterpunten.
Quote:
RewriteCond %{REQUEST_FILENAME} -f [NC,OR]
RewriteCond %{REQUEST_FILENAME} -d [NC]
NC is overbodig. Persoonlijk gebruik ik de OR ook niet. Dit volstaat:
Quote:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
Hierbij opgemerkt dat dit niet altijd het gewenste gedrag is. Als je alle bestanden nog in de public directory plaatst, kan dit zelfs zeer gevaarlijk zijn.

Daarnaast ben ik voorstander van het gebruik van conditions binnen .htaccess. Hiermee kan je de functionaliteit van deze tutorial ook (netjes) zonder mod_rewrite realiseren.

Tenslotte zou ik het splitsen van de URL OOP aanpakken, maar dat is wellicht te hoog gegrepen voor deze tutorial.

EDIT: PHP is hier veel handiger dan htaccess, zeker als je gaat kijken naar het specificeren van dynamische URLs door middel van configuratiebestanden.
Jurgen assaasas
Jurgen assaasas
12 jaar geleden
 
0 +1 -0 -1
Opzich een prima tutorial alleen vind ik de uitleg nogal minimaal.
Jesper Diovo
Jesper Diovo
12 jaar geleden
 
0 +1 -0 -1
@Donhertog:
Volgens mij niet, hoor. Je blijft dan altijd hangen bij een maximaal aantal parameters.

@Agirre:
Dankje. Ik heb die regels van Blanche' tutorial over mod_rewrite. Zelf heb ik er bar weinig verstand van hoe het precies in elkaar zit. Ik weet dat dat werkt, en dat gebruik ik het liefst dan ook. Misschien klinkt dat dom, maar ik wil iets dat werkt, ik weet dat dit werkt, dus ik gebruik het zo ; ).
Het splitsen van de URL met OOP is denk ik te ingewikkeld voor het script. Je hebt maar ??n functie nodig om het allemaal al te regelen, waarom dan een hele klasse gaan schrijven?

@Jurgen:
Dankje, ik wilde het zo makkelijk mogelijk houden ; ).
Emmanuel Delay
Emmanuel Delay
12 jaar geleden
 
0 +1 -0 -1
Oh, op deze manier lukken me dingen onmiddellijk, waar ik vroeger last mee had. Thanks.
Thomas
thomas
12 jaar geleden
 
0 +1 -0 -1
Ik weet niet hoe maar ik krijg dit niet aan het werk alle stappe doorlopen maar werkt niet? hoe kan dit?


12 jaar geleden
 
0 +1 -0 -1
Je kunt toch ook ipv alles in 1 get variabele zetten de $_SERVER['QUERY_STRING'] voor gebruiken? Is naar mijn mening veel makkelijker.
Leon Vosmeijer
Leon Vosmeijer
12 jaar geleden
 
0 +1 -0 -1
@Danny: mee eens, ik zou alleen wel de $_SERVER['REQUEST_URI'] (Let hier wel even op als je server een proxy gebruikt!!!!!) gebruiken
Jesper Diovo
Jesper Diovo
12 jaar geleden
 
0 +1 -0 -1
@Danny: $_SERVER variabelen zijn wat mij betreft niet te vertrouwen : P. Overigens zal dat niet veel verschillen, je zult toch iets moeten doen om te zorgen dat de .htaccess niet bestaande mappen constructies (die je dan probeert op te vragen) op te vangen en er iets mee doen. Veel zal het niet verschillen, maar als jij vindt van wel, ga je gang : ).
Trouwens, als je slashes als zijnde parameters gebruikt, komen die dan wel in de QUERY_STRING? Volgens mij geldt dat alleen voor ? en & parameters. Je zult dan nog alles naar ??n $_GET moeten zetten.

@Leon: Dan zul je nog meer explode werk nodig hebben, denk ik dan. Overigens geldt hier hetzelfde als wat ik tegen Danny zeg hierboven.

@thomas: Geef je errors eens, dan kunnen we je misschien beter helpen : ).
Thomas
thomas
12 jaar geleden
 
0 +1 -0 -1
@Jezpur
Dat is het probleem als ik errors zou krijgen dan zou ik het zelf oplossen
maar het script geeft geen errors weer de adress balk blijft hetzelfde

Ik kan wel dit zeggen miscchien dat dit het probleem is
Ik heb een index pagina daar staan 2 links in
de ene is duiven.php?id=home&taal=nl
de ander is duiven.php?id=home&taal=eng

Als ik daar op klik dan komt er in de adress balk de link te staan.
de content heb ik toegevoegd aan duiven.php is dit goed of moet dit aan index.php toegevoegd worden.

Met vriendelijke groet Thomas de vries.
P.s. Is een handig script als ik hem aan de praat heb xD
Jesper Diovo
Jesper Diovo
12 jaar geleden
 
0 +1 -0 -1
Ik neem aan dat je de .htaccess hebt opgeslagen en hebt ge?pload? Als dat zo is, dan moet ik even weten hoe je website in elkaar zit. Include je je pagina's in index.php of in duiven.php? Wat bevat index.php en duiven.php? Overigens zullen de links die jij geeft niet meer werken zodra je dit script gebruikt. In de tutorial kun je lezen dat het dan zo gaat worden: /duiven/id=home/taal=nl/ Als duiven.php niet ge?nclude wordt, moet je in de .htaccess even index.php veranderen in duiven.php.

Maar leg nu eerst maar even uit hoe je website in elkaar zit : ).
Thomas
thomas
12 jaar geleden
 
0 +1 -0 -1
duiven.php wordt idd niet ge?nclude had hem al aangepast in de .htaccess file.
Maar moet ik dan de links <a href="duiven.php?id=home&taal=nl>Nederlands</a>

of <a href="duiven/id=home/taal=nl>nederlands</a>
van maken.
Jesper Diovo
Jesper Diovo
12 jaar geleden
 
0 +1 -0 -1
In dat geval niet. Dan zouden de links zo moeten worden: /id=home/taal=nl/, want duiven.php roep je automatisch al aan (daar stuur je de parameters al heen). Als je nu dit doet:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
var_dump($_GET);
?>


op duiven.php zou je toch al wel wat parameters moeten krijgen? (voor en na het script)
Thomas
thomas
12 jaar geleden
 
0 +1 -0 -1
Als ik dat doe en ik roep de pagina rechstreeks zo op
www.duivensport.cjb.net/duiven/id=home/taal=nl
dan geeft ie de images niet weer. en helemaal bovenaan geeft ie dit weer.
array(1) { ["id"]=> string(23) "duiven/id=home/taal=eng" }

Wat betekent dit
Jesper Diovo
Jesper Diovo
12 jaar geleden
 
0 +1 -0 -1
Je hoeft duiven er niet tussen te zetten, want daar komt ie automatisch al. Nu zal duiven in $_GET['p'] komen.

De images klopt, dat moet ik nog in de tutorial zetten! Dankje dat je daar even tegenaan loopt :P.

Als het goed is het je nu de var_dump($_GET) v??r het script staan? Als je hem nu eens n? het script zet, dan zul je als het goed is zien dat de parameters op zn plek in de $_GET-array zitten.
Thomas
thomas
12 jaar geleden
 
0 +1 -0 -1
Bij deze heb ik het probleem opgelost hij doet nu wat ie moet doen.
Alleen ik loop nu tegen het volgende aan.
ik zit namelijk met 2 talen. NL en ENG.
nu is mijn duiven.php zo opgebouwd waar die de home en andere pagina's include.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
$id
= htmlentities($_GET['id']);
switch($id) {
    case
'home':
        include ("home.php");
        break;
    case
'verbeek':
       include ("verbeek.php");
       break;
    default:

        include ("home.php");
        break;
}


?>


En mijn volgende bestanden zitten zo

Home.php

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
mysql_connect (localhost,root,****);
mysql_select_db (duiven);

$sql = "SELECT home_nl, home_eng FROM home";
$query = mysql_query($sql);

    while ($taal = mysql_fetch_array($query))
    {

        if($_GET['taal'] == "nl")
        {

            echo $taal['home_nl'];
        }
else{
            echo $taal['home_eng'];
        }
    }


?>


Maar nu pakt ie alleen engels omdat de link niet meer zo is.
duiven.php?id=home&taal=nl
kan dit kloppen?

P.s. met de images heb ik nu zo staan
<img src="/images/banner1.jpg">
I.P.V.
<img src="images/banner1.jpg">
Jesper Diovo
Jesper Diovo
12 jaar geleden
 
0 +1 -0 -1
Wat is de URL en wat geeft var_dump($_GET) n? het script?
Jan geen
Jan geen
12 jaar geleden
 
0 +1 -0 -1
Wat nou als je niet vanuit de root werkt omdat je elders ontwikkeld, zeg in de directory test/? Dan krijg je een rare opbouw van je urls, ofwel je doet iets als: $path . "model/controller/ of je bouwt het statisch (test/page) maar dan kan je als je van directory wisselt alle urls ombouwen. Met / krijg je dat die de urls opbouwt dus /test/page/page/page/ Of is er nog een andere oplossing?
Thomas
thomas
12 jaar geleden
 
0 +1 -0 -1
De url is http://www.duivensport.cjb.net

Dit geeft ie weer aan het einde van de duiven.php

array(1) { ["id"]=> string(15) "id=home/taal=nl" }

Bij deze is alles opgelost ipv van $_GET['id']
Stond het nog op $_GET['p']

Alles werkt nu heel erg bedankt. mooie tut xD
Jesper Diovo
Jesper Diovo
12 jaar geleden
 
0 +1 -0 -1
Oh, toch wel :). Ik vond het al zo vreemd.

@Rik: Ik werk dan ook meestal met een constante - SITEURL - waarin ik het absolute pad zet. Dan kun je kleine wijzigingen meteen doorvoeren. Ik laat iedereen daar helemaal vrij in, want ik wil daarin niemand mijn mening opdringen. Dat mag men zelf bepalen ;).
Jochem
Jochem
12 jaar geleden
 
0 +1 -0 -1
Is het hierna nog mogelijk je oude links (zoals: [..]/index.php?p=home&l=nl) te gebruiken?
Jesper Diovo
Jesper Diovo
12 jaar geleden
 
0 +1 -0 -1
Neen, helaas :). Zou je dat nog willen dan? Ik neem aan dat je de nieuwe URLs mooier vindt.
Jesper Diovo
Jesper Diovo
12 jaar geleden
 
0 +1 -0 -1
@Jochem: Nu werkt dat wel. Heb de flag 'QSA' uitgevonden en toegepast en dat werkt. Het enige wat je hoeft te doen is bij de regel onder 'Overige RewriteRules onder deze regel' [L,QSA] achter te zetten. De L is nog een extraatje, wat ik eigenlijk vergeten was bij de vorige. Het geeft aan dat dat de laatste regel is in de rewrite.

Er zijn verder geen wijzigingen in het PHP script nodig! :)
Toine vd P
Toine vd P
12 jaar geleden
 
0 +1 -0 -1
Wellicht wil je wel een 404 raisen als een voorliggende directory wel bestaat.

op b.v. /static/css/bestaatniet.css wil je wel een 404 raisen, dat moet zo ongeveer werken;

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/$2 !-d
RewriteRule [^/]+(/?([^/]+)*) /index.php
Jesper Diovo
Jesper Diovo
12 jaar geleden
 
0 +1 -0 -1
Wat bedoel je met 'raisen'?
JJ
JJ
12 jaar geleden
 
0 +1 -0 -1
Hey, bij mij werkt het niet, ik heb het idee alsof ik .htacces niet mag veranderen... Ik krijg g??n vars door.
Jesper Diovo
Jesper Diovo
12 jaar geleden
 
0 +1 -0 -1
.htaccess. Weet je zeker dat je het met dubbel s hebt geschreven?
Joni Fleischer
Joni Fleischer
10 jaar geleden
 
0 +1 -0 -1
Ok ik ben het helemaal kwijt.

Ik heb de htacces aangemaakt.
Wat moet ik nu dan als pagescript gebruiken??

Want ik heb nu:
http://www.fleischer.nl

En als ik nu de map algemeen en pagina home wil oproepen wordt de link:
algemeen/home/

hoe krijg ik dat nu geinclude dan???
Bas Kreleger
Bas Kreleger
10 jaar geleden
 
0 +1 -0 -1
Wat staat er in je htaccess?
Joni Fleischer
Joni Fleischer
10 jaar geleden
 
0 +1 -0 -1
RewriteEngine On
RewriteBase /

# Bestaande bestanden of mappen uitsluiten
RewriteCond %{REQUEST_FILENAME} -f [NC,OR]
RewriteCond %{REQUEST_FILENAME} -d [NC]

RewriteRule ^(.*?)$ $1 [L]
# Alles naar één parameter
RewriteRule ^(.*?)$ index.php?p=$1 [L,QSA]
Joni Fleischer
Joni Fleischer
10 jaar geleden
 
0 +1 -0 -1
Ik heb nu gewoon de complete tut gekopieerd..
Maar hoe ik nou die aparte waardes krijg en automatisch kan uitlezen en opvragen??
PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Bas Kreleger
Bas Kreleger
10 jaar geleden
 
0 +1 -0 -1
Als je met /algemeen/home/ wilt gaan werken dan kun je dat doen als volgt:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$
RewriteRule (.*)$ /$1/ [R=301,L]


RewriteCond %{SCRIPT_FILENAME} -f [OR]
RewriteCond %{SCRIPT_FILENAME} -d
RewriteRule .* - [L]

RewriteRule ^([^/]+)/([^/]+)/$ index.php?show=$1&page=$2


Wanneer je dit zult uitvoeren, dan gaat hij dus naar je root /index.php?show=algemeen&page=home

Dat kun je gebruiken als

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
echo $_GET['show'] . ' en ' . $_GET['page'];
?>

Om te reageren heb je een account nodig en je moet ingelogd zijn.

Inhoudsopgave

  1. Inleiding
  2. Hoe ziet de URL eruit?
  3. Mod_rewrite
  4. Van één naar oneindig
  5. Afsluiting en bronnen

Labels

  • Geen tags toegevoegd.

PHP tutorial opties

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.