Niet helemaal een PHP probleempje maar wel een .htaccess probleem.
Ik heb een oude url die ik beter wil hebben voor SEO optimalisatie.
Op dit moment is dat: /nieuwsarchief/nieuws_id/5603/
Ik wil dat dit wordt: /nieuwsarchief/id/5603/
Opzich niet zo moeilijk natuurlijk maar ik wil ook dat als je perongeluk nog terecht komt op de oude url dat je doorgestuurd wordt naar de nieuwe url.
Het kan zijn natuurlijk dat mensen de oude url op een site hebben staan of in Google en ik wil wel dat dit blijft werken.
Hoe kan ik dit het beste oplossen?
Via htaccess of via een header? Als het via een header moet hoe moet dit er dan uit komen te zien en waar moet dit terecht komen?
Splits je probleem eens in twee afzonderlijke delen.
Enerzijds zit je met je redirect.
Dit hoeft niet met een 301 en hoeft ook niet per se naar de kloppende eindbestemming.
Zorg eerst een dat je Rule opgepikt wordt en stuur deze dan naar http://test.fcttoday.nl/succes.php ofzo (zonder 301). Dan weet je dat de vorm klopt als je daar terecht komt, stel vervolgens de goede URL in.
Anderzijds heb je een externe link naar interne link vertaling.
Ook dit kun je apart behandelen.
Als alle afzonderlijke delen werken klik je alles aan elkaar.
Nu probeer je alles in 1x te doen en je komt niet uit waar je moet wezen, hoe moeten wij dan (met fragmentarische of geheel geen code) weten waar het onderweg misgaat?
Verdeel en heers.
PS: het kan hierbij ook helpen als je alle browsercache uitzet...
Om van RewriteRules in een .htaccess bestand gebruik te kunnen maken dient FollowSymLinks aan te staan. Om uit te sluiten dat dit wellicht default niet ingeschakeld staat loont het wellicht de moeite om dit expliciet aan te zetten.
Het enige wat ik nog kan bedenken is dat je een leading slash moet toevoegen ofzo.
Als ik een lokaal testdomein als virtual host opzet (test.dev), dit in mijn .htaccess file zet:
# Enable rewriting.
RewriteEngine on
# Optional: explicitly enable per-directory rewrites in the .htaccess context.
Options +FollowSymLinks
# Required when not in the webroot. Always use a trailing slash.
RewriteBase /
RewriteRule ^nieuwsarchief/nieuws_id/5612/domper-voor-fc-twente-schilder-nog-wel-even-uit-de-roulatie$ http://test.dev/rewrite.php [R=301,L]
Ik heb geen idee wat je verkeerd doet. Staat mod_rewrite uberhaupt wel aan? Wellicht moet je je server nog een keer herstarten na een wijziging in de configuratie? Het zal iets (heel) banaals zijn denk ik.
Als titels uit de karakters a-z of een streepje (-) bestaan, zoiets dan:
# externe redirect van oud naar nieuw
RewriteRule ^nieuwsarchief/nieuws_id/(\d+)/([a-z_-]+)$ http://je.domein.com/nieuwsarchief/id/$1/$2 [R=301,L]
# nieuwe externe clean url naar interne url
RewriteRule ^nieuwsarchief/id/(\d+)/([a-z_-]+)$ index.php?p=nieuwsarchief&nieuws_id=$1&titel=$2 [L]
Al zou ik niet weten waarom je de titel zou willen doorgeven aangezien je het id al hebt.
En zoals ik al aangaf, het kan korter, die /id/ is helemaal niet nodig, en als je titel-slugs uniek zijn is zelfs het id niet nodig (in dat geval kan het wel handig zijn om de titel door te geven, maar die zou je ook uit de URL kunnen halen; deze hoef je niet expliciet in $_GET te stoppen).
Super dank voor je hulp het werkt nu helemaal!
Ik heb dit bewust op deze manier gedaan voor de SEO.
Zonder titel, of dergelijke scoor je veel minder hoog.