permanent redirect 301 in htacces
Ik heb mijn url's met mod_rewrite in de .htacces file aangepast. Maar hoe kan ik nou een rewriterule 301 maken naar een andere rewriterul?
Zie onderstaand de oude pagina die ik wil 301 redirecten naar de nieuwe pagina. Eigenlijk moet het woordje oud worden vervangen door het woordje nieuw.
<script>
OUDE rewriterule:
RewriteRule ^oud/(.*)/(.*)/(.*)/(.*)$ listing.php?subcategory=$1&lang=$2&categoryid=$3&subcategoryid=$4
NIEUWE rewriterule:
RewriteRule ^nieuw/(.*)/(.*)/(.*)/(.*)$ listing.php?subcategory=$1&lang=$2&categoryid=$3&subcategoryid=$4
</script>
Bedankt voor je reactie!
Bedoel je dat de url in mijn geval er dan zo uit moet komen te zien?
<script>
Redirectmatch 301 $oud/(.*)/(.*)/(.*)/(.*)$ listing.php?subcategory=$1&lang=$2&categoryid=$3&subcategoryid=$4 $nieuw/(.*)/(.*)/(.*)/(.*)$ listing.php?subcategory=$1&lang=$2&categoryid=$3&subcategoryid=$4
</script>
of
<script>
Redirectmatch 301 $oud/(.*)/(.*)/(.*)/(.*)$ $nieuw/(.*)/(.*)/(.*)/(.*)$ listing.php?subcategory=$1&lang=$2&categoryid=$3&subcategoryid=$4
</script>
Ik hoor het graag!
Wil je elke url die begint met /oud/... vervangen door /nieuw/...
waarbij de tekst op ... gelijk blijft?
Of geldt dat alleen voor de situatie dat er na /oud/ nog 4 "mappen" volgen?
In het eerste geval:
of de redirectmatch-syntax die mij niet bekend is. (al lijkt me dat de $ voor oud een ^ moet zijn.
Ik heb nu een rewriterule zie: RewriteRule ^oud/(.*)/(.*)/(.*)/(.*)$ listing.php?subcategory=$1&lang=$2&categoryid=$3&subcategoryid=$4
Nu wil ik alleen het woordje "oud" aanpassen naar bijvoorbeel "nieuw", maar als ik dat doe is de oude url niet meer bereikbaar dus wil ik er een 301 redirect van maken zodat Google weet dat de url verplaatst is.
Maar hoe doe ik dat? Ik vindt het een beetje moeilijk om uit te leggen maar hoop dat het zo duidelijker is.
Code (php)
1
2
3
4
5
2
3
4
5
# eerst alles wat met "oud" begint, naar "nieuw", met een 301
RewriteRule ^oud/(.*) /nieuw/$1 [R=301]
# dan begint de betreffende regel dus niet meer met "oud", maar met "nieuw":
RewriteRule ^nieuw/(.*)/(.*)/(.*)/(.*)$ listing.php?subcategory=$1&lang=$2&categoryid=$3&subcategoryid=$4 [L]
RewriteRule ^oud/(.*) /nieuw/$1 [R=301]
# dan begint de betreffende regel dus niet meer met "oud", maar met "nieuw":
RewriteRule ^nieuw/(.*)/(.*)/(.*)/(.*)$ listing.php?subcategory=$1&lang=$2&categoryid=$3&subcategoryid=$4 [L]
--
ik heb de /? weggelaten uit de eerste regel, aangezien het op jouw server kennelijk zonder begin-slash werkt.
--
Als je de server benadert met een url /oud/..... dan wordt er eerst een redirect uitgevoerd: er wordt tegen de browser gezegd: ga maar eens kijken op /nieuw/.....
Browser vraagt die url op.
Eerste regel is niet van toepassing, dus hobbelen we verder.
Dan matchen we op de regel "begint met nieuw/ en dan 4 mappen."
die wordt vervolgens omgezet (intern) naar listing.php met wat parameters.
Je eindigt dan dus op de goede pagina met een url in de adresbalk van de browser die met /nieuw begint
Zo simpel kan het zijn je moet het alleen even weten;-)
Bedankt!
Groeten,
Michiel
Toevoeging op 11/04/2014 13:51:17:
Hoi Ivo,
Ik heb een GET laten vervallen hoe kan ik dit nu oplossen met de redirect? De categoryID is komen te vervallen.
oud
listing.php?subcategory=$1&lang=$2&categoryid=$3&subcategoryid=$4 [L]
nieuw
listing.php?subcategory=$1&lang=$2&subcategoryid=$3 [L]
Het punt is dat de categoryid na de 301 redirect de subcategoryid word omdat de subcategoryID op de plaats staat van de categoryid.
Ik moet denk ik in de 301 redirect aangeven dat de categoryid is komen te vervallen.
iets van:
RewriteRule ^oud/(.*)(.*)vervallen(.*) /nieuw/$1 [R=301]
Ivo P op 11/04/2014 09:15:22:
of de redirectmatch-syntax die mij niet bekend is. (al lijkt me dat de $ voor oud een ^ moet zijn.
Oeps, foutje. Het moest inderdaad een ^ zijn.
Het verschil tussen RedirectMatch en RewriteRule is dat de eerste onderdeel is van mod_alias en de tweede van mod_rewrite. In principe heeft het de voorkeur om Redirect of RedirectMatch te gebruiken; dat zal een performance-dingetje zijn, omdat mod_rewrite een vrij zware module is.
Overigens zou de redirect nog simpeler moeten kunnen:
Redirect 301 /oud /nieuw
oude url
http://mijdomein.nl/oud/nl/1/30
nieuwe url moet zijn 30 zoals onderstaand maar met een 301 redirect wordt het 1:
http://mijdomein.nl/nieuw/nl/30
Toevoeging op 11/04/2014 14:53:55:
Beste allen,
Ik heb het als volgt kunnen oplossen. (zoals je ziet heb ik de $3 weggelaten, nu is die dus komen te vervallen)
RewriteRule ^oud/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/ /nieuw/$1/$2/$4/$5/$6/ [R=301]
RewriteRule ^oud/(.*)/(.*)/(.*)/(.*)/(.*)/ /nieuw/$1/$2/$4/$5/ [R=301]
RewriteRule ^oud/(.*)/(.*)/(.*)/(.*)/ /nieuw/$1/$2/$4/ [R=301]