Videresende dynamiske urler

Tonny Kluften

Administrator
Jeg har et nettsted som jeg skal bytte CMS på. Urlene vil bli nye. Jeg har masse innlinker til forskj. sider på nettstedet og vil ta vare på de.

Gamle urker er:
nettsted.com/view_recipe.php?id=7226&recipe_title=Pork_with_chili_
Nye urler blir
nettsted.com/Pork-with-chili

Fikk en forklaring på engelsk, men jeg vet ikke hvordan jeg skal gjøre det, altså hvordan skal koden jeg skriver i view_recipe.php se ut?

Forklaringa jeg fikk:

This would be one of those times a scripted redirect would be a much better option than an .htaccess redirect. The search engines don't care and won't even know that you're using a scripted redirect and not .htaccess.

You'd have to have map out the old url query strings and the new ones, but setting up a little case/switch routine in the view_recipe.php page that performs a proper 301 redirect from the old pages to the new ones should be fairly straight forward. Just make sure you declare it to be a 301 Moved Permanently redirect in the first Location: line.
 

picxx

WF 09
Skjønte ikke noe av det svaret du har fått der jeg, men er mulig å gjøre dette i .htacces.

When rewriting dynamic pages, Rewrite Conditional should be used to check for the dynamic query string (in this case "?view=home" before implementing the rewrite of index.php to the root top level domain in this case.

Please remember to remove the ",L" from the code if this isn't the last 301 redirect in your htaccess file.

An example is given below:

Kode:
RewriteEngine On
RewriteCond %{QUERY_STRING} view=home
RewriteRule ^index\.php$ http://www.domain.co.uk/$1? [R=301,L]

Htaccess Mod Rewrite Examples, 301 Redirects, Dynamic URL Rewrites
 

tyr897

Medlem
Det han mener er at php scriptet redirecter selv.

Eksempel:
Kode:
<?php
// se om vi requester view_recipe.php direkte (litt knotete, men det som kom ut "at the top of my head")
if ( strpos($_SERVER['REQUEST_URI'], 'view_recipe.php') !== false) {
   // hent ut hvor vi skal sendes
   if ( ! isset($_GET['recipe_title']))
      $uri = '/';
   else
      $uri = '/' . str_replace('_', '-', $_GET['recipe_title']);

   header('Location: http://mittnettsted'.$uri, true, 301);
   exit;
}
 

Tonny Kluften

Administrator
tyr897, tusen takk, din løsning virker når gamle urler ikke har underscore, slik:

Gamle urker er:
Kode:
nettsted.com/view_recipe.php?id=7226&recipe_title=Pork_with_chili
Nye urler blir
nettsted.com/Pork-with-chili

Når gamle urler har underscore, slik:

Kode:
nettsted.com/view_recipe.php?id=7226&recipe_title=Pork_with_chili_
blir nye urler slik:
nettsted.com/Pork-with-chili-

Hva gjør jeg for å få det til å virke i begge tilfeller? Altså at ingen nye urler får bindestrek på slutten.

En eller annen kode som sier at hvis siste tegn i en url er bindestrek så skal bindestreken fjernes?

Og hvis det finnes noe som gjør alle bokstaver små i urlene hadde det vært topp.

tyr897, jeg setter gjerne inn et par 100-lapper i banken din som takk for hjelpa.
 
Sist redigert:

Tonny Kluften

Administrator
Hmm, ingen av disse virker, hva er galt?

Kode:
if ( strpos($_SERVER['REQUEST_URI'], 'bil.php') !== false) {
if ( ! isset($_GET['recipe_title']))  {
$uri = '/';
}else{
$uri = '/' . str_replace('_', '-', $_GET['recipe_title']);
}


if (substr($uri, -1) == "-") {
$uri = substr($uri, 0, -1); 
}


header('Location: http://nettsted.info'.$uri, true, 301); exit; }
  
  
--------------------------------------------------------------------------------


if ( strpos($_SERVER['REQUEST_URI'], 'bil.php') !== false) { 
if ( ! isset($_GET['recipe_title'])) 
$uri = '/'; 
else 
$uri = '/' . str_replace('_', '-', $_GET['recipe_title']); 


if (substr($uri, -1) == '-')
$uri = substr($uri, 0, -1);  

	
header('Location: http://nettsted.info'.$uri, true, 301); exit; }
 
Hm. Hva mener du med at det ikke virker? Får du en feilmelding? Redirecter ikke siden? Redirecter den, men til feil sted?

Jeg har testet denne selv nå (riktignok med echo() i stedet for header()) og får ingen problemer.

EDIT: Jeg får ingen problemer når jeg tester denne UTEN
PHP:
if ( strpos($_SERVER['REQUEST_URI'], 'bil.php') !== false) { ... }

Ser at jeg også får feil når denne ikke er med. Men går ut fra at det er fordi filen jeg tester dette på ikke heter bil.php. Din fil heter sannsynligvis bil.php?

... EDIT 2: Nei, din fil sa du jo at heter view_recipe.php. Så hva er bil.php?
 
Sist redigert:
Da vet jeg ikke helt hva problemet kan være, ettersom jeg som sagt får akkurat den biten til å virke uten problemer. Bare for å være sikker: Du har vel bare EN bunnstrek på slutten av variabelen du putter inn i $_GET['recipe_title'], og ikke to eller flere?
 
Hm... Jeg får tydeligvis opp et helt annet resultat enn deg her. Når jeg klikker på linkene blir jeg ikke redirectet i det hele tatt -- jeg kommer til en 404-side. Og når jeg klikker på linken til bil.php?id=1967&recipe_title=Acura_CSX, kommer jeg til ... bil.php?id=1967&recipe_title=Acura_CSX .

Kan det være tilfelle at koden din inneholder en syntaksfeil som gjør at siden ikke vises? Og at den virker for deg fordi du har den i cache... nei, det gir kanskje ikke mening det heller?

Jeg får iallefall 404 når jeg klikker på de lenkene der, og underscore blir ikke til bindestrek i det hele tatt. Så noe er galt her.
 

Kenneth Dreyer

Well-Known Member
Jeg regner med det er den SEO-messige verdien du er ute etter å beholde her?

Kort sagt ville min løsning på dette være:

1. En PHP-redirect lignende den skissert av tyr897. Det har ingenting å si om header kommer fra .htaccess eller PHP, så lenge det gjøres riktig (det er forøvrig mye lettere å gjøre gjennom PHP).

2. Spesifisert canonical (les mer).
 

zapotek

Medlem
Det sikreste er å gjøre det manuelt med PHP på hver enkelt underside. Det blir dog et helvette av et arbeid om det er veldig mange sider det er snakk om.
 
Topp