Google-Freundliche URLs

Hallo!

SPIP generiert ja URLs nach dem Motto article.php3?id_article=77.
Ich möchte nun gern das meine URLs so heißen: titel-der-seite.php

Wie bekomme ich das hin?
Es gibt zwar eine Erklärung auf http://www.spip-contrib.net/article.php3?id_article=167 - allerdings nur auf good old französisch und ziemlich unverständlich (jedenfalls für meinen momentanen Geisteszustand.)
Es wäre daher absolut klasse, wenn ihr noch eine FAQ-Seite zu diesem Thema machen würdet.
Was sind die Voraussetzungen, damit das klappt?
Was muß ich in welchen Dateien ändern?

Hmmmm ... das wäre Klasse.

Merci
Jörg

--

-----------------------------------------------------
Die vielfältigen Seiten im Netz
http://www.themenmix.de
Das Leben, das Universum und der ganze Rest
http://www.themenmixer.de - das Weblog
Die Bodenseeblogger - das Weblog rund um den Bodensee
http://www.bodenseeblogger.de

Am 10.08.2004 15:17 schrieb webmaster@themenmix.de:

Hallo!

SPIP generiert ja URLs nach dem Motto article.php3?id_article=77.
Ich möchte nun gern das meine URLs so heißen: titel-der-seite.php

Wie bekomme ich das hin?
Es gibt zwar eine Erklärung auf Une arborescence virtuelle dans l'URL - SPIP-Contrib - allerdings nur auf good old französisch und ziemlich unverständlich (jedenfalls für meinen momentanen Geisteszustand.)

Hallo,

es liegt nicht am Geisteszustand, sondern es ist auch ein wenig kompliziert. Ich nutze diese Technik auch für meine Seiten und muß sagen, daß es wirklich sehr hilfreich ist (also bei google bei bestimmten Stichwörten weit oben zu landen, selbst mit einer kleinen privaten Seite).

Ein Lösung wie titel_des_artikels.php wird schwer sein, was aber möglich ist, ist titel_des_artikels_arktikel6.html, dies habe ich so auf einigen seiten (http://www.heiko-jansen.de oder http://www.al-bochum.net ) gemacht. JEtzt gibt es erstmal eine Anleitung wie man aus dem article.php3?id_article=x die Links auf artikelx.html umstellen kann (weil es viel einfacher ist und man so das System versteht) und später den Code für die Aufwändigeren Sachen mit dem Titel des Artikels...

Generell gilt:

Du mußt zwei Sachen machen:
a) Innerhalb von SPIP einstellen, wie die internen Links aussehen sollen
b) dem Server (Apache) mit .htaccess mitteilen, daß er bestimmte
Anfragen auf andere Seiten umleiten soll.

zu a)
Bei SPIP gibt es im root-Verzeichnis es Dateien namens inc-url-xxx.php3
In diesen Dateien ist festgelegt, wie SPIP-intern die Links aussehen
sollen. In inc-urls-dist.php3 wird festgelegt, welches Schema genutzt
werden soll, standardmäßig wird auf inc-urls-standard.php3 zugegriffen.
Dort finden sich Zeilen wie diese:

function generer_url_article($id_article) {
          return "article.php3?id_article=$id_article";
}

In der zweiten Zeile wird nun angegeben, wie die Links intern aussehen
sollen. Änderst du jetzt article.php3?id_article=$id_article in
artikel$id_article.html würdest du als internen Link für Artikel 12 den
Link artikel12.html erhalten.

Es gibt schon eine Datei inc-urls-html.php3, wo soetwas mit
französischen Text gemacht worden ist. Diese kannst du z.B.
eindeutschen und als inc-urls-deutsch.php3 abspeichern. Dann mußt du
noch in der Datei inc-urls-dist die vorletzte Zeile ändern:
aus

$type_urls = "standard";

wird

$type_urls = "deutsch";

Jetzt stimmen die Links SPIP-intern, doch beim Aufrufen einer Seite
namens artikel12.html würde der Webserver ein 404-Fehler produzieren,
jetzt müssen wir also dem Server beibringen, die neuen Formate auf
bestehende Seiten umzuleiten. Weil ein Klick auf artikel12.html soll ja
in Wirklichkeit auf article.php3?id_article=12 umleiten. Deshalb nun
Schritt b)

Dies passiert beim Apache mit dem ModRewrite-Befehl. Dazu mußt du eine
Datei namens .htaccess anlegen (wenn sie nicht schon existiert) und dort
folgende Zeilen einfügen:

RewriteEngine on
# urls spip
RewriteRule ^rubrik([0-9]+)\.html$ /rubrique.php3?id_rubrique=$1 [QSA,L]
RewriteRule ^artikel([0-9]+)\.html$ /article.php3?id_article=$1 [QSA,L]
RewriteRule ^aktuell([0-9]+)\.html$ /breve.php3?id_breve=$1 [QSA,L]
RewriteRule ^secteur([0-9]+)\.html$ /secteur.php3?id_rubrique=$1 [QSA,L]
RewriteRule ^rubrik_text([0-9]+)\.html$
/rubrik_text.php?id_rubrique=$1 [QSA,L]
RewriteRule ^artikel_text([0-9]+)\.html$
/artikel_text.php?id_article=$1 [QSA,L]
RewriteRule ^aktuell_text([0-9]+)\.html$
/aktuell_text.php?id_breve=$1 [QSA,L]
RewriteRule ^index_text.html$ /start_text.php [QSA,L]
RewriteRule ^termine.html$ /termine.php [QSA,L]
RewriteRule ^termine_text.html$ /site_termine_text.php [QSA,L]
RewriteRule ^index.html$ /index.php [QSA,L]

Hier werden sog. Reluläre Ausdrücke genutzt, die von der Syntax her erstmal
recht kryptisch klingen, aber sehr mächtig sind.
In unserem Falle bedeutet es, daß eine Anfrage an den Server namens
artikel12.html ersetzt wird in article.php3?id_article=12.
Beachte: Wenn du SPIP in einem Unterverzeichnis deines Servers
installierst, dann müssen die Umelitungsregeln vom obersten Verzeichnis
des Servers aus gemacht werden. Ich denke zur RewriteEngine und den
Tricks damit wirst du mit Google auch einige gute deutsche Seiten finden.

Ja, jetzt sollte alles klappen. Tut es wahrscheinlich nicht auf Anhieb,
hat bei mir auch nicht alles sofort geklappt, bei der .htaccess-Datei
muß alles stimmen, sonst funktioniert es nicht, diese muß z.B. bei
einigen Serven im ASCII- und nicht im Binary-Format übertragen werden
etc. pp.

Das ist das Prinzip dahinter: Unter Spip die internen Links ändern und dann dem Server sagen, dass er bei den neuen Links auf die "normalen" Spip-Seiten (article.php&artlicle_id=x) umleiten soll.

Da ich die regulären Ausdrücke auch nicht wirklich verstehe, habe ich einfach für die komplexeren Titel_der_seiten.html-sachen einfach den Code übernommen.

In SPIP soltest du eine Datei anlegen namens inc-urls-friendly.php3 und die urls-dist daurauif verweisen (s.o.). Diese inc-urls-friendly sieht bei mir so aus:

<?php
require 'ecrire/inc_charsets.php3';

function text2sys($text)
{
         $sys = $text;
         $sys = strtolower(translitteration($sys, 'iso-8859-1'));
         $sys = ereg_replace("^[0-9]+\. ", "", $sys);
         $sys = ereg_replace("[^.a-z0-9_=-]+", " ", $sys);
         $sys = ereg_replace(" +", "_", trim($sys));
         return $sys;
}

function arborescence($id_rubrique)
{
         if ($id_rubrique == 0) {
                 $url = $GLOBALS['meta']['adresse_site'].'/';
         } else {
                 $result = spip_query("SELECT id_parent, titre FROM spip_rubriques WHERE id_rubrique=$id_rubrique");
                 $row = spip_fetch_array($result);
                 $url = arborescence($row['id_parent']).($row['id_parent'] != 0 ? text2sys($row['titre']).'_' : '');
     }
         return $url;
}

function generer_url_rubrique($id_rubrique) {
         $url = arborescence($id_rubrique).'rubrique'.$id_rubrique.'.html';
         return $url;
}

function generer_url_article($id_article) {

         $result = spip_query("SELECT id_rubrique, titre FROM spip_articles WHERE id_article=$id_article");
         $row = spip_fetch_array($result);
         $url = arborescence($row['id_rubrique']).text2sys($row['titre']).'_article'.$id_article.'.html';
         return $url;
}

function generer_url_breve($id_breve) {
         $result = spip_query("SELECT id_rubrique, titre FROM spip_breves where id_breve=$id_breve");
         $row = spip_fetch_array($result);
         $url = arborescence($row['id_rubrique']).text2sys($row['titre']).'_breve'.$id_breve.'.html';
         return $url;
}

function generer_url_forum($id_forum) {
         $url = $GLOBALS['meta']['adresse_site'].'/forum'.$id_forum.'.html';
         return $url;
}

function generer_url_mot($id_mot) {
         $result = spip_query("SELECT titre FROM spip_mots WHERE id_mot=$id_mot");
         $row = spip_fetch_array($result);
         $url = $GLOBALS['meta']['adresse_site'].'/'.text2sys($row['titre']).'_mot'.$id_mot.'.html';
         return $url;
}

function generer_url_auteur($id_auteur) {
         $result = spip_query("SELECT nom FROM spip_auteurs WHERE id_auteur=$id_auteur");
         $row = spip_fetch_array($result);
         $url = $GLOBALS['meta']['adresse_site'].'/'.text2sys($row['nom']).'_auteur'.$id_auteur.'.html';
         return $url;
}

function generer_url_document($id_document) {
         if ($id_document > 0) {
                 $result = spip_query("SELECT fichier FROM spip_documents WHERE id_document = $id_document");
                 if ($row = spip_fetch_array($result)) {
                         $url = $GLOBALS['meta']['adresse_site'].'/'.$row['fichier'];
                 }
         }
         return $url;
}

function recuperer_parametres_url($fond, $url) {
         global $contexte;
}
?>
---ENDE---

Die .htaccess sieht bei Heiko-jansen.de dann so aus:

--START--

RewriteEngine On

# Pas de reecriture pour certaines ressources
RewriteRule \.(gif|jpg|png|css|php|php3) - [NC,L]
RewriteRule ^(ecrire|IMG|NAVPICS|oo)/ - [NC,L]

# Gerer les URLs SPIP
RewriteRule ^.*(article|rubrique|breve|auteur|mot|forum)(.*).html$ /$1.php3?id_$1=$2 [QSA,L]
RewriteRule ^(.*)site(.*).html$ $1site.php3?id_syndic=$2 [QSA,L]

# Gerer les URL inconnues
# RewriteRule ^(.+/.*)$ guess.php3?url=$1 [QSA,L]

RewriteRule ^artikel([0-9]+)\.html$ article\.php3?id_article=$1 [QSA,L]
RewriteRule ^rubrik([0-9]+)\.html$ rubrique\.php3?id_rubrique=$1 [QSA,L]

---ende---

Das führt bei heiko-jansen.de dazu, daß nicht nur der name des artikels, sondern auch der Rubrik angezeigt wird. Wenn man sich mit den regulären Ausdrücken wirklich auskennt, kann man auch URLS wie site.de/rubrik/unterrubrik/name_artikel.html zaubern.

viele Grüße
Heiko Jansen

--
Heiko Jansen, Bochum, Germany
e.mail[1]: heiko.jansen@rub.de
e.mail[2]: heiko@schaustall.de
web: http://www.heiko-jansen.de
ENCRYPT YOUR E-MAILS! VERSCHLÜSSELT EURE MAILS!
PGP-Key auf Anfrage oder auf der Webseite

Hallo Jörg,

die Übersetzung des Artikels zum URL-rewriting steht an ...
Bis dahin sei beruhigt - Google stört sich überhaupt nicht an den SPIP-Standard-URLs. Kannst Du ausprobieren: Die Eingabe "Seitenstark-Chat bei sowieso" findet richtig den dazu gehörigen Artikel auf sowies.de - obwohl die URLs noch kryptischer sind, als die ganz normalen von SPIP produzierten.

klaus++

webmaster@themenmix.de wrote:

Hallo!

SPIP generiert ja URLs nach dem Motto article.php3?id_article=77.
Ich möchte nun gern das meine URLs so heißen: titel-der-seite.php

Wie bekomme ich das hin?
Es gibt zwar eine Erklärung auf Une arborescence virtuelle dans l'URL - SPIP-Contrib - allerdings nur auf good old französisch und ziemlich unverständlich (jedenfalls für meinen momentanen Geisteszustand.)
Es wäre daher absolut klasse, wenn ihr noch eine FAQ-Seite zu diesem Thema machen würdet.
Was sind die Voraussetzungen, damit das klappt?
Was muß ich in welchen Dateien ändern?

Hmmmm ... das wäre Klasse.

Merci
Jörg

Hi Klaus!

Erstmal muß ich mich bei Heiko bedanken ... (daher geht diese Mail auch die List) ... ich bin zwar noch nicht dazu gekommen, dass alles mal zu testen, aber immerhin habe ich's mir schonmal durchgelesen :slight_smile:

Was das finden der Seiten bei Google angeht: Sicher - wenn die Seite mal gespidert wurde, dann wird man auch gefunden. Doch neben der Linkpopularität zählt für das Ranking IMHO auch der Suchbegriff im URL.
Und da ich meine jetzigen Seiten sehr auf diese Sachen getrimmt habe, und auch bei guten -Suchbegriffen auf Top-Platzierungen zu finden bin, will ich natürlich nur einen kleinen Einbruch beim "Umschalten" auf die SPIP-Version riskieren. Wenn ich mal soweit komme. *g*

Übrigens Tipp an Heiko: Versuche in der URL die Worte nicht mit "_" sondern mit "-" zu verbinden. Mit dem Unterstrich getrennte Worte erkennt Google nicht als Einzelworte sondern als ein Wort. Und wer sucht schon nach "film_tv_schimmi_is_back_article13"? :wink:

Ok ... ich schwitze jetzt mal weiter. Leider kann ich gerade nur sehr wenig an SPIP basteln, aber die Zeit kommt schon wieder.

Ciao und heiße Grüße aus dem Süden
Jörg

die Übersetzung des Artikels zum URL-rewriting steht an ...
Bis dahin sei beruhigt - Google stört sich überhaupt nicht an den SPIP-Standard-URLs. Kannst Du ausprobieren: Die Eingabe "Seitenstark-Chat bei sowieso" findet richtig den dazu gehörigen Artikel auf sowies.de - obwohl die URLs noch kryptischer sind, als die ganz normalen von SPIP produzierten.

klaus++

webmaster@themenmix.de wrote:

Hallo!

SPIP generiert ja URLs nach dem Motto article.php3?id_article=77.
Ich möchte nun gern das meine URLs so heißen: titel-der-seite.php

Wie bekomme ich das hin?
Es gibt zwar eine Erklärung auf Une arborescence virtuelle dans l'URL - SPIP-Contrib - allerdings nur auf good old französisch und ziemlich unverständlich (jedenfalls für meinen momentanen Geisteszustand.)
Es wäre daher absolut klasse, wenn ihr noch eine FAQ-Seite zu diesem Thema machen würdet.
Was sind die Voraussetzungen, damit das klappt?
Was muß ich in welchen Dateien ändern?

Hmmmm ... das wäre Klasse.

Merci
Jörg

_______________________________________________
Spip-de@rezo.net - http://listes.rezo.net/mailman/listinfo/spip-de

--

-----------------------------------------------------
Die vielfältigen Seiten im Netz

Das Leben, das Universum und der ganze Rest
http://www.themenmixer.de - das Weblog
Die Bodenseeblogger - das Weblog rund um den Bodensee
http://www.bodenseeblogger.de