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