htaccess zoeken
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!
Gewijzigd op 14/07/2015 01:41:50 door Fth lalala
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
Lees eens 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.
Het is me inmiddels gelukt. Ik heb het opgelost met javascript:
location.href = 'search/'+document.getElementById('q').value.replace(' ', '+');
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.
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?
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.
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?
Toevoeging op 15/07/2015 21:21:26:
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
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:
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.
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.
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.
Heren bedankt voor jullie uitleg! Ik leer steeds meer en meer :D.