Kjapp og trygg hosting for Wordpress

Rewrite til æ, ø, å i .htaccess

tigeren

New Member
Hvorfor må de rewrites i .htaccess? Er det ikke lettere med en search&replace for så å få kontroll på character encoding i fremtiden?
 

tigeren

New Member

Tonny Kluften

Administrator
Tenker du dynamisk Tonny? eller er det bare snakk om noen få adresser?

Dynamisk.

Vil det f.eks. være bedre og heller gjøre det om til, ø=oe, å=aa etc?

Nei, da ødelegger man ø`en i slugen. Det er denne urlen det dreier seg om: mineoppskrifter.no/bringebær-ostekake/
Google leter etter mineoppskrifter.no/bringeb%E6r-ostekake, men finner den ikke. Så jeg vil redirekte den til mineoppskrifter.no/bringebær-ostekake/.

redirect 301 bringeb%E6r-ostekake http://www.mineoppskrifter.no/bringebær-ostekake/ i htaccess fungerer heller ikke. Men det har fungert tidligere.

Her er forøvrig hele .htaccess som ikke fungerer nå. %E6 blir ikke æ.

#BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
RewriteRule ^(.*)%E6(.*)$ /$1æ$2 [L,R=301]
</IfModule>
# END WordPress

Har det betydning ift SEO om slug er /bringebær-ostekake/ vs /bringebaer-ostekake/ ?

Hvis den forandres fra æ til ae har det stor betydning, hvis den konstant er det ene eller det andre spiller det ingen rolle.
 

Tonny Kluften

Administrator
Oppdaget at det ligger en fil i root med dette innholdet som gjør at innlenker som http://www.mineoppskrifter.no/view_recipe.php?id=4867&recipe_title=Sjokoladekake_med_poteter fungerer:

<?php

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

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

//$uri = strtolower($uri);

//$uri = strtolower(str_replace(array('r', 'b', '%E6', '%F8', '%E5'), array('ggg', 'z', 'æ', 'ø', 'a'), $uri));

$uri = strtolower(str_replace(array('%E6', '%F8', '%E5'), array('&aelig;', '&oslash;', 'a'), $uri));

//$uri = strtolower(str_replace(array('Æ', 'Ø', 'Å'), array('æ', 'ø', 'å'), $uri));

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

?>
 
Sist redigert:

Tonny Kluften

Administrator
Saken er at det er en del innlenker til nettsida som har %E6 i urlen. Disse innlenkene går nå ikke til riktig side, de går bare til en 404 side fordi sida med %E6 ikke finnes. Disse lenkene gikk til riktig side tidligere, men altså ikke nå lenger. Det er verdifulle lenker som er veldig bra for sida så jeg er veldig oppsatt på å beholde dem.
 

tigeren

New Member
Testa kjapt nå.. fikk det ikke til å fungere jeg heller. Virker som URL blir urldecoded automatisk i .htaccess før rewriten og da nytter det jo ikke søke på de tegna.

Du kan jo alltids gjøre noe i php da, noe ala dette feks:

PHP:
$requested_url = $_SERVER[REQUEST_URI];

if(stristr($requested_url, '%')){
    $new_url = urldecode($requested_url);
    header("HTTP/1.1 301 Moved Permanently");
    header("Location: $new_url");
}

NB! ikke testet...
 

Tonny Kluften

Administrator
Ok, takk for den, jeg kan ikke PHP, er det slik du mener? Og at jeg legger inn dette i head tagen?

Kode:
 $requested_url = $_SERVER[REQUEST_URI];

if(stristr($requested_url, '%E6')){
    $new_url = urldecode($requested_url);
    header("HTTP/1.1 301 Moved Permanently");
    header("Location: http://www.mineoppskrifter.no/bringeb%C3%A6r-ostekake/");
}
 

tigeren

New Member
Ok, takk for den, jeg kan ikke PHP, er det slik du mener? Og at jeg legger inn dette i head tagen?

Ja noe sånt, men den vil i teorien videresende ALLE url som inneholder '%E6' til
http://www.mineoppskrifter.no/bringebær-ostekake/ og det kan jo være litt dumt.

Her er en som funker og med kommentarer på hva den gjør :)

PHP:
    $url = $_SERVER[REQUEST_URI]; // henter requested url (alt etter domenenavn) og lagrer det til en variabel kalt $url

    if(stristr($url, '%E6')){ // hvis søkestrengen '%E6' finnes i $url variabel
        $new_url = str_replace('%E6', '%C3%A6', $url); // lag en ny url der alle tilfeller av '%E6' erstattes med '%C3%A6'
        header("HTTP/1.1 301 Moved Permanently"); // sett opp en 301 redirect
        header("Location: http://www.mineoppskrifter.no" . $new_url); // redirect til den ny adressen
        exit; // stopp videre execution av script
    }

Edit: Må legges inn før <!DOCTYPE> tag helt øverst i koden. Du får en feilmelding på "headers allready sent" hvis du legger den inn i <head>. Ingenting kan outputtes før scriptet kjøres.
 
Topp