webForumDet fria alternativet

namn.html --> namn.php

15 svar · 836 visningar · startad av K@llen

K@llenMedlem sedan mars 20032 667 inlägg
#1

Tja,

Har under en tid haft statiska html-sidor som nu bytts ut till dynamiska php-sidor. Kruxet är att sökmotorerna länkar till html-sidorna, vilket ger felsida att filen inte kan hittas. Nu vill jag peka om html-adresserna till php-adresserna. En fullösning är ju att ha html-filerna kvar och köra en redirect till dess php-motsvarighet. Men det borde finnas ett proffsigare alternativ. Kan man göra något med modrewrite kanske?

Linux, Apache och PHP används. :)

PaceMedlem sedan juni 20019 024 inlägg
#2

Använd url:er som ser ut som example.org/namn/ i stället för example.org/namn.php. Då kan du byta till vilken teknik du vill utan att adresserna bryts.

Använd aldrig .filtillägg om det inte är absolut nödvändigt. mod_rewrite fungerar, men det är alltid bäst att skicka statusmeddelande till sökmotorer från den gamla sidan som säger "den här sidan har en ny adress" (301 Moved Permanently).

Om du använder mod_rewrite så har du i stället två adresser på halsen, varav den ena saknas.

K@llenMedlem sedan mars 20032 667 inlägg
#3

Pace skrev:

Använd url:er som ser ut som example.org/namn/ i stället för example.org/namn.php. Då kan du byta till vilken teknik du vill utan att adresserna bryts.

Låter mycket sunt. Hur gör man då för att få det rätt?

Pace skrev:

Använd aldrig .filtillägg om det inte är absolut nödvändigt. mod_rewrite fungerar, men det är alltid bäst att skicka statusmeddelande till sökmotorer från den gamla sidan som säger "den här sidan har en ny adress" (301 Moved Permanently).

Hur talar man om detta för sökmotorerna?

Pace skrev:

Om du använder mod_rewrite så har du i stället två adresser på halsen, varav den ena saknas.

Så sant. Så sant. :)

PaceMedlem sedan juni 20019 024 inlägg
#4

/namn/ är en katalog. Däri lägger du en fil som heter "index.html" (eller index.php, index.asp eller vad du nu använder). Således blir den fysiska adressen /namn/index.php.

Notera även att ja skriver "/namn/" och inte "/namn". Det lilla extra snedstrecket betyder att servern ska leta direkt efter en katalog (och inte en fil, vilket "/namn" egentligen är). Det sparar tid. Okej, inte mycket tid men fullt mätbart.

K@llen skrev:

Hur talar man om detta för sökmotorerna?

Problemet är att du använt .html-filer från början, vilket inte kan innehålla någon programkod såvida du inte mappar .html till PHP-processen eller liknande (jag vet inte hur det fungerar i Apache, men jag antar att det är snarlikt IIS).

När du väl gjort det så skickar du statusmeddelandet 301 i sidans http-huvud. Ungefärlig kodbeskrivning:

header.status = "301 Moved Permanently"

Kan du inte göra detta så får du bita i det sura äpplet och manuellt göra html-filer som säger "den här sidan är flyttad, gå hit för den nya adressen: /namn/". Se till så att filen har "noindex" i sin meta robots-tag, men däremot "follow" så att html-filen inte indexeras, men däremot följer länkarna som finns på den.

Förhoppningsvis kan det ge samma resultat som att skicka statusmeddelandet, men det kan ta betydligt längre tid.

Vad min erfarenhet beträffar så snappar Google upp statusmeddelandet och ändrar adressen direkt. Men jag gjorde samma misstag i början (använde html-filer alltså) och får fortfarande 404:or på filer som togs bort för sisådär fem år sedan. ;) :e URL:er är bland det viktigaste när man bygger en webbplats. Allt går ju att ändra i efterhand utom just dessa.

K@llenMedlem sedan mars 20032 667 inlägg
#5

Pace skrev:

/namn/ är en katalog. Däri lägger du en fil som heter "index.html" (eller index.php, index.asp eller vad du nu använder). Således blir den fysiska adressen /namn/index.php.

Notera även att ja skriver "/namn/" och inte "/namn". Det lilla extra snedstrecket betyder att servern ska leta direkt efter en katalog (och inte en fil, vilket "/namn" egentligen är). Det sparar tid. Okej, inte mycket tid men fullt mätbart.

Ja, så långt begrep jag också. Kruxet är ju sedan att skicka de gamla länkarna rätt. Jag tror jag löser det med hjälp av denna beskrivning:
http://www.webforum.nu/showthread.php?s=&postid=977956#post977956

Pace skrev:

Problemet är att du använt .html-filer från början, vilket inte kan innehålla någon programkod såvida du inte mappar .html till PHP-processen eller liknande (jag vet inte hur det fungerar i Apache, men jag antar att det är snarlikt IIS).

När du väl gjort det så skickar du statusmeddelandet 301 i sidans http-huvud. Ungefärlig kodbeskrivning:

header.status = "301 Moved Permanently"

Kan du inte göra detta så får du bita i det sura äpplet och manuellt göra html-filer som säger "den här sidan är flyttad, gå hit för den nya adressen: /namn/". Se till så att filen har "noindex" i sin meta robots-tag, men däremot "follow" så att html-filen inte indexeras, men däremot följer länkarna som finns på den.

Förhoppningsvis kan det ge samma resultat som att skicka statusmeddelandet, men det kan ta betydligt längre tid.

Jag får söka och se om jag hittar någon bra sätt att få sökmotorerna att fatta detta. :)

PaceMedlem sedan juni 20019 024 inlägg
#6

K@llen skrev:

Kruxet är ju sedan att skicka de gamla länkarna rätt. Jag tror jag löser det med hjälp av denna beskrivning:
http://www.webforum.nu/showthread.php?s=&postid=977956#post977956

Som jag även skrev till svar på Jarvklos inlägg, så är det inte bra att göra så. Men i ditt fall kan det kanske vara nödvändigt.

K@llenMedlem sedan mars 20032 667 inlägg
#7

Preliminärt löste jag det så här:
http://www.webforum.nu/showthread.php?s=&postid=988315#post988315

Kanske kan man då göra errorsidan i PHP och säga till sökmotorerna att adressen är flyttad innan man skickar användaren rätt. Får klura på detta. I nuläget hamnar alla som kommer till en icke existerande sida på förstasidan och det är huvudsaken just nu. :)

jarvkloMedlem sedan juli 20013 378 inlägg
#8

Har du mod_rewrite, så kan du iofs lösa det ganska smidigt genom att skicka alla accesser till "sidor som inte är kataloger och inte finns i adressrymden" till en omdirigeringssida såhär också:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ omdirigering.php?q=$1 [L,QSA]

där omdirigering.php tar hand om att skicka "301", "404" eller annan tillämplig felkod samt dirigering till rätt php-fil eller katalog genom att tolka parametern q...

Du kan även köra detta mot en intelligent index.php direkt ;)

K@llenMedlem sedan mars 20032 667 inlägg
#9

jarvklo skrev:

Har du mod_rewrite, så kan du iofs lösa det ganska smidigt genom att skicka alla accesser till "sidor som inte är kataloger och inte finns i adressrymden" till en omdirigeringssida såhär också:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ omdirigering.php?q=$1 [L,QSA]

där omdirigering.php tar hand om att skicka "301", "404" eller annan tillämplig felkod samt dirigering till rätt php-fil eller katalog genom att tolka parametern q...

Du kan även köra detta mot en intelligent index.php direkt ;)

Okey :)

Men är det inte i princip samma sak som detta i .htaccess?

ErrorDocument 404 /omdirigering.php

Då skulle jag kunna ha:

<?php
header("HTTP/1.0 301 Moved Permanently");
?>

i PHP-sidan.

PaceMedlem sedan juni 20019 024 inlägg
#10

Smart sätt, jarvklo. :)

jarvkloMedlem sedan juli 20013 378 inlägg
#11

Men är det inte i princip samma sak som detta i .htaccess?

Njae - du slipper få 404 (saknas) som returkod vid omdirigeringen om du skippar ErrorDocument-metoden (något som annars är oundvikligt om jag inte är helt ute och cyklar nu ;) ) och det är, som Pace påpekar, bättre med "flyttad" än "saknas" om man vill behålla sökmotorranking ;)

"Perfect 404"-metoden rekommenderade jag i fallet att det var ASP som gällde för tekniken har jag för mig (IIS har ingen mod_rewrite). Själv kör jag den andra eftersom jag hostar på Apache.

Mer om returkoder och när/hur man bör använda vilka finns här:http://www.w3.org/TR/2003/NOTE-chips-20030128/

K@llenMedlem sedan mars 20032 667 inlägg
#12

jarvklo skrev:

Men är det inte i princip samma sak som detta i .htaccess?

Njae - du slipper få 404 (saknas) som returkod vid omdirigeringen om du skippar ErrorDocument-metoden (något som annars är oundvikligt om jag inte är helt ute och cyklar nu ;) ) och det är, som Pace påpekar, bättre med "flyttad" än "saknas" om man vill behålla sökmotorranking ;)

Ja, det har du ju rätt i. :) Sätter jag bara en header som 301 i omdirigering.php då? Och skickar sedan besökaren vidare till lämplig sida? Jag hänger inte med riktigt där med smarta returkoder. :r

jarvkloMedlem sedan juli 20013 378 inlägg
#13

Pace skrev:

Smart sätt, jarvklo. :)

tack :r - men metoden är inte uppfunnen av mig, den används av flera OpenSource-CMS och bloggverktyg sedan länge och jag såg den första gången i samband med att jag konfigurerade Blosxom för xhtml.nu och grottade i dess dokumentation för ganska länge sedan...

jarvkloMedlem sedan juli 20013 378 inlägg
#14

Sätter jag bara en header som 301 i omdirigering.php då? Och skickar sedan besökaren vidare till lämplig sida?

Yep

<?php
header("HTTP/1.1 301 Moved Permanently");
header("Location: ".$url);
header("Connection: close");
?>

borde funka som avslutning efter det att koden i omdirigering.php klurat fram värdet på $url ;)

K@llenMedlem sedan mars 20032 667 inlägg
#15

Tack Pace och Jarvklo! :)

Då var problemet löst. Markerar ett av svaren som lösningen.

PaceMedlem sedan juni 20019 024 inlägg
#16

jarvklo skrev:

Pace skrev:

Smart sätt, jarvklo. :)

tack :r - men metoden är inte uppfunnen av mig, den används av flera OpenSource-CMS och bloggverktyg sedan länge och jag såg den första gången i samband med att jag konfigurerade Blosxom för xhtml.nu och grottade i dess dokumentation för ganska länge sedan...

Som med de flesta smarta lösningar så är de ofta väldigt enkla och bygger på befintliga metoder. Annars är det ju vanligt att man flyger över ån med Concorde för att hämta vatten. ;)

142 ms totalt · 3 externa anrop · v20260731065814-full.fb544a5a
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
139 ms — hämta tråd, inlägg och bilagor (db)