Met htacces een 301 maken voor de q=value, kan dat?

Status
Niet open voor verdere reacties.

thapriest

Gebruiker
Lid geworden
28 okt 2009
Berichten
559
Goedemiddag mensen,

Wie kan er eens een lichtje schijnen op het volgende:

In webmaster tools krijg ik 404's op veel urls omdat de q=value is veranderd naar q=anderevalue. (ik gebruik ook nette urls, maar er zijn helaas ook wat backlinks die via het zoekform werken en die url knippen en plakken ipv mij de url te vragen).

Nu wil ik die niet kwijtraken en Google als grote vriend houden, veel 404's vindt google niet leuk heb ik me laten vertellen. en wil ik dus een 301 redirect maken in de htacces, zoals ik die voor de rest ook heb gedaan. alleen dacht ik er hiermee:
Code:
RewriteRule ^index.php?q=oudevalue$ http://www.mijnwebsite.nl/index.php?q=nieuwevalue [R=301,L]

te zijn, maar niets bleek minder waar te zijn. Heeft iemand nog een ideetje?

Groetjes Robin
 
Uhm, misschien vreemd, maar waarom ondervang je dat niet in index.php ? Ik neem aan dat de 404 gegenereerd wordt door index.php
 
Omdat ik alle rewrites in de htacces heb, bovendien bestaat index niet echt(dynamische pagina's). Maar als je een manier weet om dat elders op te vangen, hoor ik m ook graag, als ik google maar vertellen kan dat ze verplaatst zijn.
 
als je weet wat de eventuele verkeerde queries zijn kun je dat doen met een

rewritecond %{QUERY_STRING} fout

maar is een beetje afhankelijk wat je al hebt en wat je verwacht.
 
Ah, daar heb ik nog niet eerder mee gewerkt.

Ik heb één foute en één goede. Nadeel echter(misschien) dat er meerdere condities aan de url kunnen zitten, dus bijv:
Code:
www.mijnwebsite.nl?index.php?q=foutestring&andereconditie=ietsanders
.
 
Laatst bewerkt:
Dat is in principe geen probleem. rewritecond neemt ook regular expressions. De gevonden expressie kun je in rewriterule meenemen.

In het geval van meerdere items gaat je eerste query natuurlijk ook niet werken daar je je query afsluit met een "$"

^...$ matched alleen als dat de exacte query is (dus er niets achter).

RewriteCond %{QUERY_STRING} ^q=fout(\w+)$
RewriteRule ^index.php?q=goed%1

let op Q moet het eerste argument moet zijn. ongetest, maar zoiets moet het zijn (hen geen access tot een server om het er even door te halen)
 
Bedankt voor je uitleg, dat verduidelijkt al iets. Nu heb ik natuurlijk even klakkeloos je code overgenomen om te testen, maar het doet helemaal niets. zelfs geen fout.

Maar dat komt misschien doordat ik niet begrijp wat (\w+) achter de var doet en de %1 achter de nieuwe url .
 
(\w+) zou alle tekst na q=fout moeten bevatten. vervolgens kun je die terugplakken met %1. Omdat ik het zelf nu niet kan testen gaat het misschien ook wel fout.

mogelijk werkt het wel met (.+) bedenk ik me nu. krijg je als je zelf niet even kunt prutsen ;)
 
Ah, weer wat geleerd:)

Ja, ik ken dat, als je niet zelf even kunt testen is het lastig. ;)

Maar helaas, ook met (.+) gen resultaat, vliegt gewoon naar mijn 404 pagina.
We zoeken verder.
 
RewriteCond %{QUERY_STRING} ^q=fout(.+)
RewriteRule (.*) /test.php?q=goed%1 [R]
RewriteCond %{QUERY_STRING} ^q=fout
RewriteRule (.*) /test.php?q=goed%1 [R,L]

getest en werkt voor mij via htaccess
 
Dank je, ik ga het morgen even testen en bekijken of ik hem in zn geheel begrijp.
 
Werkt al een zonnetje!:)

Maar, ik zou ook graag begrijpen en leren van wat ik zojuist deed.
Waarom zet ik 2x een conditie?

Even voor de volledigheid, trouwens, ik heb van de R een R=301 gemaakt, om google te vertellen dat de informatie die hij zoekt permanent naar een andere locatie is verhuisd.

Mijn dank is enorm groot:-)
 
Ik heb er gisteravond nog even naar gekeken en als het goed is kan het ook met 1 regel:

RewriteCond %{QUERY_STRING} ^q=fout(.+)?
RewriteRule (.*) /test.php?q=goed%1 [R]

Ik kreeg het eerst niet goed werkend met de greedy modifier (het vraagteken). Nu blijkt dat de greedy modifier dus achter de haakjes moet en niet erin bij deze config.

De condition is als volgt:

De query (alles achter een ? in een url) moet:

^ (beginnen met)
q=fout (letterlijke tekst)
() wat tussen de haakjes zit opslaan voor verder gebruik
.+ willekeurige tekenreeks van 0 of meer characters
? voorstaande is optioneel, maar indien mogelijk meenemen in de match

De regels voor regular expressions zijn veelal gelijk, maar niet gestandaardiseerd. Ik had "?" al geprobeerd, maar ik bedacht me pas laat op de avond dat niet de tekens optioneel moesten zijn, maar het hele blok.
 
Deze rule werkt inderdaad ook, en sneller dan de vorige;)

Ik schrijf het even in mn oplossingenboekje op, helemaal helder nu:)

Mag ik je heel hartelijk bedanken voor een wijze les en een oplossing.
 
Voor eventueel verdere reference:

http://www.regular-expressions.info/reference.html

Als je veel met data werkt zijn regular expressions echt een geweldige tool

Overigens is de %1 op de tweede regel dus de data tussen de haakjes op regel een. regular expressions werken ook zo in rewriterule, echter zijn de verwijzingen dan $1 $2 etc.

.* = match alles van tenminste 1 teken (URL) en plak daar "/test..." achter. In dit geval wordt daar dus impliciet de hele URL voorgezet
 
Nogmaals dank. De link gebookmarked voor toekomstig referentie materiaal:)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan