Hoe kan ik het gedeelte ".php?variabele=" weren uit mijn hyperlink zonder de variabele zelf te verwi
Ik vraag me af of er een manier bestaat om bepaalde informatie uit de hyperlink in de adresbalk van je pagina te weren zonder de eigenlijke variabele te verwijderen?
vb. ik heb een pagina www. ... .be/provincie.php?provincie=Limburg en dit zou indien mogelijk www. ... .be/provincie Limburg moeten worden waarbij dat hij nog steeds weet dat hij de informatie uit die specifieke variabele moet gebruiken.
Mvg,
Google eens op: url rewrite htaccess. Indien je er niet uitkomt heb ik wel wat voorbeelden.
@gerhard: Ik ben wel geïnteresseerd in voorbeelden, want ik heb dezelfde vraag. En na 3 dagen goochelen en worstelen had ik het opgegeven. Alle uitleg die ik heb kunnen vinden over htaccess, heeft mij de oplossing niet kunnen brengen.
Code (php)
1
2
3
4
2
3
4
RewriteEngine on
RewriteRule ^([^/]*)/$ index.php?page=$1 [NC,L]
RewriteRule ^([^/]*)$ index.php?page=$1 [NC,L]
RewriteRule ^([^/]*)/([^/]*)/$ index.php?page=$1&id=$2 [NC,L]
RewriteRule ^([^/]*)/$ index.php?page=$1 [NC,L]
RewriteRule ^([^/]*)$ index.php?page=$1 [NC,L]
RewriteRule ^([^/]*)/([^/]*)/$ index.php?page=$1&id=$2 [NC,L]
Je begint met RewriteEngine on voordat je de rewrites gaan maken in je .htacess bestand, deze zet je in de gewenste map, vaak de root.
1e voorbeeld met 1 var:
^ begin van de rewrite rule
([^/]*) Dit betekent alle tekens: a-zA-Z0-9 enz.
/ Slash op het einde van de url
$ einde van de opgevraagde url
index.php?page=$1 dit is waar je de opgevraagde url heen wil sturen, waar $1 de ([^/]*) is.
[NC,L] De link doorsturen
2e voorbeeld met 1 var zonder slash
^ begin van de rewrite rule
([^/]*) Dit betekent alle tekens: a-zA-Z0-9 enz.
$ einde van de opgevraagde url
index.php?page=$1 dit is waar je de opgevraagde url heen wil sturen, waar $1 de ([^/]*) is.
[NC,L] De link doorsturen
3e voorbeeld met 2 vars
^ begin van de rewrite rule
([^/]*)/([^/]*)/ Dit betekent alle tekens: a-zA-Z0-9 enz. Alleen nu dus gescheiden door een slash, waardoor er 2 vars opstaan.
$ einde van de opgevraagde url
index.php?page=$1&id=$2 dit is waar je de opgevraagde url heen wil sturen, waar $1 en $2 de vars zijn.
[NC,L] De link doorsturen
Gewijzigd op 22/08/2014 15:05:20 door gerhard l
* staat voor 0 of meer stuks
+ zou staan voor 1 of meer
Als je op regel 4 die /$ vervangt door /?$ dan mag de laatste / ook weggelaten worden
In de root het bestand index.php, dat steeds de inhoud ophaalt van de diverse pagina´s. Deze staan in /content.
De pagina´s roep ik aan met index.php?page=pagina. Als ik de htaccess in de root zet, dus bij de index.php, dan krijg ik de melding 'page not found'. Zet ik m in de map content, dan gebeurt er niks en blijf ik in de adresregel index.php?page=pagina zien.
een print_r($_GET); en kijk of de htaccess je de goede vars meegeeft.
En Ivo bedankt voor de toevoeging ;)
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
if (!isset($_GET['page'])) {
//url-variable doesnt exit, call homepage
include('content/index.inc.php');
}
else {
//url-variable exits, call file
$page = 'content/'.$_GET['page'].'.inc.php';
if (file_exists($page)) {
//page exits, show page
include($page);
}
else {
//page doesnt exit, show text
echo 'This page you called for, doesnt exit!';
}
}
//url-variable doesnt exit, call homepage
include('content/index.inc.php');
}
else {
//url-variable exits, call file
$page = 'content/'.$_GET['page'].'.inc.php';
if (file_exists($page)) {
//page exits, show page
include($page);
}
else {
//page doesnt exit, show text
echo 'This page you called for, doesnt exit!';
}
}
Dit is het deel uit index.php waar de inhoud steeds aangeroepen wordt. De inhoud staat dus in de subdirectory /content.
Een aangeroepen pagina staat in de adresregel weergegeven als: www.website.com/index.php?page=pagina.
Dat wil ik dus veranderen in: www.website.com/pagina.
In de htaccess heb ik dit staan:
Vraag: Moet de htaccess in de root of in /content?
Vraag: Moet ik de subdirectory ergens vermelden?
De exacte foutmelding (not-foundmelding) is dit:
Not Found
The requested URL /index.php was not found on this server.
Apache/2.4.9 (Win64) PHP/5.5.12 Server at 127.0.0.1 Port 80
- nee
- je zou een / voor index.php?page=$1 moeten hebben
Heb het trouwens ook even met de online website getest, in geval het met wampserver te maken heeft, maar ook daar precies het zelfde.
Gewijzigd op 23/08/2014 09:02:53 door tortuga web
Echt niemand een idee wat er fout is in bovenstaand script?
Code (php)
1
2
3
4
2
3
4
Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteRule ^([^/]*)/?$ index.php?page=$1 [NC,L]
RewriteEngine On
RewriteBase /
RewriteRule ^([^/]*)/?$ index.php?page=$1 [NC,L]
Gewijzigd op 26/08/2014 00:19:17 door Goto Learn
Ook niet, blijf de 404 not found page houden.
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
RewriteEngine On
RewriteBase /
# eerst afvangen dat we niets doen als de file gevonden wordt
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
# de rest (mits geen / in url ) naar index.php
RewriteRule ^/([^/]*)/?$ /index.php?page=$1 [R]
RewriteBase /
# eerst afvangen dat we niets doen als de file gevonden wordt
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
# de rest (mits geen / in url ) naar index.php
RewriteRule ^/([^/]*)/?$ /index.php?page=$1 [R]
De eerste / is volgens mij afhankelijk van je server settings.
Ik heb een [R] geplaatst zodat wat beter zichtbaar is wat gebeurt.
Werkt het, dan daar weer [L] van maken
Ivo P op 26/08/2014 10:13:27:
Dit begrijp ik niet. Waarom niets doen als de file gevonden wordt? Ik wil toch juist wel wat doen als de file gevonden wordt, want ik wil dat de adresregel dan herschreven wordt.
Dus je link moet wel iets worden van http://www.domain.tld/foo/bar
de rewriterules moeten er voor zorgen dat het niet bestaande
http://example.com/contact
wordt vertaald (op de server) naar http://example.com/index.php?page=contact
maar je wilt niet dat http://example.com/images/foto.jpg ook iets wordt als
http://example.com/index.php?page=images/foto.jpg of zo.
En al helemaal niet dat /index.php wordt vertaald naar index.php?page=index.php en dan weer naar /index.php?page=index.php?page=index.php etc
Daarom de eerste paar regels "als de file bestaat, doe niets"
Das raar, hier op mijn "test-localhost" werkt het prima. Heb je rewrite mod wel geactiveerd in Apache (of wat je ook gebruikt?)?
Ik kan mijn .htaccess file, om deze bovenstaande voorgestelde veranderingen uit te proberen, niet vinden. Heeft iemand een idee waar ik die kan vinden.
en staat doorgaans in je document root.
Mvg,