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
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.
Dan plaats je de redirect regel hoger in je .htaccess file dan de "herschrijf naar listing.php " regel.
# 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]
--
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
Gewoon een (.*)/ minder en de categoryid weghalen en $4 wordt dan $3....
# dan begint de betreffende regel dus niet meer met "oud", maar met "nieuw":
RewriteRule ^nieuw/(.*)/(.*)/(.*)$ listing.php?subcategory=$1&lang=$2&subcategoryid=$3 [L]
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:
Het punt is nu dat de categoryid is komen te vervallen en de categoryid op de plaats komt van de subcategoryid. zie als onderstaand. Bij een redirect komt het getal "1" te staan waar eigenlijk "30" moet staan.