Beste Leden,

Ik ben bezig met een zoeksysteem voor mijn website. Zoekopdracht wordt door middel van een GET method doorgegeven aan zoek.php

Graag zou ik willen dat de URL er zo uit komt te zien:

www.mijnwebsite.nl/zoek/hier_zoek_query

Helaas lukt dat mij maar niet, het ziet er nu als volgt uit:

www.mijnwebsite.nl/zoek/hier_zoek_query?q=hier_zoek_query (<- dubbel dus)

Weten jullie misschien hoe ik met htaccess alles vanaf '?' kan verwijderen?

Code ziet er nu zo uit:

RewriteCond %{QUERY_STRING} ^q=1$
RewriteRule ^zoek.php zoek/? [L,R=301]
RewriteRule ^zoek/(.*)$ zoek.php?q=$1 [L,NC]

Bedankt allemaal!
Lees eens hier
Daar staat in detail uitgelegd hoe je verchillende transformaties kan doen met je GET method (de z.g.n. "query string")

In jouw geval is vooral het laatste kopje "Making the Path Part of the Query String" van toepassing
Met php slim 2 framework routings system kan je dit ook makkelijk maken.
Beste leden,

Het is me inmiddels gelukt. Ik heb het opgelost met javascript:

location.href = 'search/'+document.getElementById('q').value.replace(' ', '+');
Dus bij elke pagina-aanroep wordt je doorgestuurd naar dezelfde pagina, maar met een iets andere URL?
Lijkt mij geen goede oplossing, mocht dit het geval zijn.
Eddy E op 15/07/2015 14:01:53

Dus bij elke pagina-aanroep wordt je doorgestuurd naar dezelfde pagina, maar met een iets andere URL?
Lijkt mij geen goede oplossing, mocht dit het geval zijn.




Heey Eddy,

Waarom is dat geen goed idee?
Bovenstaande code wordt aangeroepen als er op submit wordt gedrukt.

Ook heb ik veel met htaccess geprobeerd, maar is me niet echt gelukt.
Hoe zou jij het aanpakken?
Javascript is inderdaad geen oplossing. Nu voer je in principe 2 requests uit op je server om alleen een URL te herschrijven. Schaal je applicatie eens (in gedachten) op naar een grote hoeveelheid gebruikers die zoeken en bedenk daar een server load bij.

Om ook nog even op je eerste post te reageren: Volgens mij mis je het "RewriteEngine on" directive in je .htaccess.

Dat alles gezegd te hebben, probeer dit eens als .htaccess:

RewriteEngine on
RewriteRule ^zoek/(.+)$ zoek.php?q=$1 [L]

En dump dan eens $_GET in je zoek.php.
Heb het net even snel getest en volgens mij moet het zo goed gaan.

Maar nu het belangrijkste: Wat gebeurt hier?

Je zegt in feite dit:
Als "zoek/" voorkomt aan het begin van de URL, pak dan alles wat daar achter staat en prop het in $1.
Vervolgens gaan we dit intern behandelen alsof de URL zoek.php?q=$1 was.
De [L] flag zegt dat er geen verdere rewrites moeten worden uitgevoerd op URLs die matchen met het voorgaande.

Hoop dat het zo een beeje duidelijk uitgelegd is.
Termination nvt op 15/07/2015 15:50:13

Javascript is inderdaad geen oplossing. Nu voer je in principe 2 requests uit op je server om alleen een URL te herschrijven. Schaal je applicatie eens (in gedachten) op naar een grote hoeveelheid gebruikers die zoeken en bedenk daar een server load bij.

Om ook nog even op je eerste post te reageren: Volgens mij mis je het "RewriteEngine on" directive in je .htaccess.

Dat alles gezegd te hebben, probeer dit eens als .htaccess:

RewriteEngine on
RewriteRule ^zoek/(.+)$ zoek.php?q=$1 [L]

En dump dan eens $_GET in je zoek.php.
Heb het net even snel getest en volgens mij moet het zo goed gaan.

Maar nu het belangrijkste: Wat gebeurt hier?

Je zegt in feite dit:
Als "zoek/" voorkomt aan het begin van de URL, pak dan alles wat daar achter staat en prop het in $1.
Vervolgens gaan we dit intern behandelen alsof de URL zoek.php?q=$1 was.
De [L] flag zegt dat er geen verdere rewrites moeten worden uitgevoerd op URLs die matchen met het voorgaande.

Hoop dat het zo een beeje duidelijk uitgelegd is.



Hey Termination,

Het is me gelukt met .htaccess! Mag ik die $1 trouwens ook voor andere RewriteRules gebruiken?
Ja, $1 is gewoon je eerste variabele. Soms heb je ook een $2 en (heel soms) een $3. Maar als dat nodig is, is het niet heel logisch opgezet.

[size=xsmall]Toevoeging op 15/07/2015 21:21:26:[/size]

Eddy E op 15/07/2015 21:17:30

Ja, $1 is gewoon je eerste variabele. Soms heb je ook een $2 en (heel soms) een $3. Maar als dat nodig is, is het niet heel logisch opgezet.


Zo heb ik bijvoorbeeld dit
index.php?p=a&id=$1   RewriteRule ^artikel/(.*)/(.*)


Wat dat doet?
Een adres als http://www.zunflappie.nl/artikel/221/stuurslot-verwijderen doorsturen naar index.php?p=a&id=221
P = pagina
A = Artikel
ID = het id
Ik doe dus niets met het stukje "stuurslot-verwijderen"

Zou ik dit in mijn htaccess opnemen, dan kan ik wel wat met dat stukje:
index.php?p=a&id=$1&tekst=$2   RewriteRule ^artikel/(.*)/(.*)

Alle tekst na de derde slash (dus stuurslot-verwijderen) komt dan binnen via $_GET['tekst']

Nu heb ik dat puur voor het oog en voor Google, meer niet.
Eddy, ik begrijp waarom je het zo doet, maar als het puur voor het oog en voor Google is, dan kun je overwegen om

http://www.zunflappie.nl/artikel/221/stuurslot-verwijderen

te herschrijven naar

http://www.zunflappie.nl/zundapp-stuurslot-verwijderen

Dat heeft voor SEO wat voordelen: een extra keyword, een kortere URL en keywords dichter bij het begin.

Het betekent ook dat je (meestal) niet meer alleen .htaccess kunt gebruiken voor de routing, maar dat je in index.php zult moeten controleren of de opgevraagde URL voorkomt in een database of paginacache.
Daar heb ik wel over nagedacht, maar er zijn veel links op internet die direct verwijzen naar een artikel.
En die moeten dat ID ook hebben. Dus om historische redenen (jaja) is dit zo.
En het minder fout-gevoelig (een - of een _?). Nu is dat redelijk dicht te spijkeren, maar zo zeker als een nummertje wordt het nooit.

Reageren