Geordnete Url durch Mod_Rewrite
Leon
- webserver
Hallo Forum,
ich möchte mein Forum (ein Woltlab Burning Board 2.1) für Suchmaschinen durchsuchbar machen. Dabei stört aber die Domain, da die Suchmschine erkennt, dass sie dynamisch ist. Ich würde jetzt also gerne diese URL
http://www.test.de/forum/thread.php?threadid=1273&sid=
in diese URL
http://www.test.de/forum/thread1273.html
umgewandeelt haben.
Hat jemand Erfahrung damit oder eine Idee zur Umsetzung?
Leon
Hallo Leon,
Hat jemand Erfahrung damit oder eine Idee zur Umsetzung?
Das geringste Problem dürfte das umschreiben durch mod_rewrite sein. Eine einfache .htaccess-Datei im forum-Unterverzeichnis müsste mit folgendem Inhalt das Umschreiben bewirken:
RewriteEngine On
RewriteBase /forum/
RewriteRule ^thread(\d+).html$ thread.php?threadid=$1 [L,QSA]
(nicht getestet, sollte aber funktionieren)
Das größte Problem, das Du haben wirst, ist der Boardsoftware zu sagen, dass sie auch überall die Links auf die thread123.html ausgeben soll und nicht auf thread.php?threadid=123. Du wirst also in der Software nach 'thread.php' suchen müssen und überall die Stellen abändern müssen. Das ist sicherlich ein ganzer Batzen Arbeit.
Achja, wenn Du schon mod_rewrite verwendest, warum dann Pfade wie '/forum/thread123.html'? Warum lässt Du nicht gleich die Endung weg? ('/forum/thread123' oder '/forum/threads/123')
Viele Grüße,
Christian
PS: Du bist von der Stiftung Warentest?
Ok, ich habe jetzt die .htaccess erstellt und mit dem gleichen inhalt im boardverzeichnis (also /forum/)abgespeichert den du gepostest hast. im forum habe ich jetzt einen testlink geändet der im quelltext wie folgt aufgebaut ist:
thread$threads[threadid].html
das erzeugt dann solche links:
thread1188.html
wenn ich jetzt aber auf den link klicke bekomme ich nur eine 404, seite nicht gefunden-meldung! woran könnte das liegen? das rewrite_modul ist geladen.
p.s.: Ich bin nicht von der stiftung warentest.
Hallo Leon,
Hat jemand Erfahrung damit oder eine Idee zur Umsetzung?
Das geringste Problem dürfte das umschreiben durch mod_rewrite sein. Eine einfache .htaccess-Datei im forum-Unterverzeichnis müsste mit folgendem Inhalt das Umschreiben bewirken:
RewriteEngine On
RewriteBase /forum/
RewriteRule ^thread(\d+).html$ thread.php?threadid=$1 [L,QSA](nicht getestet, sollte aber funktionieren)
Das größte Problem, das Du haben wirst, ist der Boardsoftware zu sagen, dass sie auch überall die Links auf die thread123.html ausgeben soll und nicht auf thread.php?threadid=123. Du wirst also in der Software nach 'thread.php' suchen müssen und überall die Stellen abändern müssen. Das ist sicherlich ein ganzer Batzen Arbeit.
Achja, wenn Du schon mod_rewrite verwendest, warum dann Pfade wie '/forum/thread123.html'? Warum lässt Du nicht gleich die Endung weg? ('/forum/thread123' oder '/forum/threads/123')
Viele Grüße,
ChristianPS: Du bist von der Stiftung Warentest?
Hallo Leon,
wenn ich jetzt aber auf den link klicke bekomme ich nur eine 404, seite nicht gefunden-meldung! woran könnte das liegen?
- Der Server ignoriert alle .htaccess-Dateien.
- Irgendetwas ist in der .htaccess-Datei falsch.
Du könntest mal probieren
RewriteBase /forum
statt
RewriteBase /forum/
anzugeben.
Ansonsten: Hast Du Zugriff auf Dein error-log? Steht dort etwas von "thread1188.html not found" (o.ä.) oder "thread.php not found"?
Viele Grüße,
Christian
Hallo Christian,
das mit dem Slash hat nicht funktioniert. Auf die Errorlog kann ich nicht zugreifen. Gibt es dafür nicht ein Testscript? Der Service vom Provider ist zu vergessen. Ich weiß mir echt nicht zu helfen, aber ich brauche diese Lösung unbedingt.
Ich habe bereits in einem anderen Forum eine Lösung gefunden die nicht funktioniert.
Da wird noch mit einer mod_rewrite.php gearbeitet. Hier die kurze Anleitung von www.woltlab.de
Du erstellst eine Datei .htaccess in deinem Boardverzeichnis (wenn die Datei noch nicht existiert)
Da fügst du folgenden Code ein: code:
RewriteEngine On
RewriteRule ^([^/]+)/(.+)/x.wbb$ mod_rewrite.php?$1&........................$2 [L]
RewriteRule ^([^/]+)/x.wbb$ mod_rewrite.php?$1 [L]
RewriteRule ^([^/]+)x.wbb$ mod_rewrite.php?$1 [L]
Du erstellst eine Datei mod_rewrite.php in deinem Boardverzeichnis
Da fügst du folgenden Code ein: php:
<?
if(!$_SERVER['QUERY_STRING']) die('kein direktaufruf erlaubt!');
unset($filename);
if(strpos($_SERVER['QUERY_STRING'],'&........................')===false)
{
#echo "kein querystring\n<br>\n";
#echo "dateiname: ".$_SERVER['QUERY_STRING'];
$filename=str_replace('..','',$_SERVER['QUERY_STRING']);
}
else
{
list($filename,$querystring)=explode('&........................',$_SERVER['QUERY_STRING']);
#echo "querystring: ".$querystring;
#echo "\n<br>\n";
#echo "dateiname: ".$filename;
#echo "\n<br>\n";
$http_querystring=explode('/',$querystring);
while(list(,$value)=each($http_querystring))
{
if(!strlen($value) || !strlen(current($http_querystring)))
{
continue;
}
$varname=$value;
$varvalue=current($http_querystring);
$_GET[$varname]=$varvalue;
$_REQUEST[$varname]=$varvalue;
#echo $value.'='.current($http_querystring)."\n<br>\n";
next($http_querystring);
}
}
include './'.$filename/*.'.php'*/;
?>
Füge in dein headinclude-Template folgenden Code ein: code:
1:
<base href="http://url/zu/deinem/boardverzeichnis/">
Aus
board.php?boardid=$row[boardid]&sid=$session[hash]
wird:
board/boardid/$row[boardid]/sid/$session[hash]/x.wbb
Wenn irgendwo in einem Link ./ verwendet wird, musst du es entfernen.
Da sich auf Links innerhalb von JavaScripts (Popups) <base href> nicht auswirkt musst du da vor den Dateinamen den kompletten URL-Pfad setzen.
Leon
Hallo Leon,
das mit dem Slash hat nicht funktioniert.
Dann Probiere mal folgendes:
RewriteEngine on
RewriteBase /forum
RewriteRule ^thread.php [F]
Wenn Du nun immernoch auf die thread.php zugreifen kannst und kein 403 Forbidden kommt, dann wird die .htaccess-Datei ignoriert und Du kannst nichts machen, außer Dich an Deinen Hoster wenden.
Da wird noch mit einer mod_rewrite.php gearbeitet. Hier die kurze Anleitung von www.woltlab.de
[...]
board/boardid/$row[boardid]/sid/$session[hash]/x.wbb
*argh* - die Session-ID sollte gerade *nicht* als Verzeichnis verwendet werden, sonst wird das noch von Suchmaschinen indiziert. Die Session-ID sollte durchaus im Query-String enthalten sein! Von dieser Lösung halte ich nicht viel. Viel besser war Dein Ansatz, den Du am Anfang dieses Threads verfolgt hast.
Viele Grüße,
Christian
Hallo Christian,
glücklicherweise kommt eine Fehlermeldung. Die Seite kann nicht gefunden werden! Weißt du sonst noch einen Rat?
Leon
Hallo Leon,
Weißt du sonst noch einen Rat?
Kannst Du noch einmal folgenden Inhalt in die .htaccess-Datei stellen:
RewriteEngine On
RewriteBase /forum
RewriteRule ^thread(\d+).html$ thread.php?threadid=$1 [L,QSA]
Und die URL dann posten? Damit man sich das Problem mal "ansehen" kann?
Viele Grüße,
Christian
Hallo Christian,
vielen dank schon mal zwischendurch für deine Hilfe. Das Testforum liegt jetzt im Verzeichnis wbb2. Die komplette Url lautet:
http://www.growbook.de/wbb2/
Die Links sind im Moment nur in den Foren geändert. Also die Links direkt zu den Beiträgen. Du findest solche z.B. unter:
http://www.growbook.de/wbb2/board.php?boardid=111&sid=
Der Inhalt der .htaccess sieht wie folgt aus:
RewriteEngine On
RewriteBase /wbb2
RewriteRule ^thread(\d+).html$ thread.php?threadid=$1 [L,QSA]
Das die Bilder nicht angezeigt werden liegt daran, dass ich sie noch nicht in das entsprechende Verzeichnis kopiert habe.
Leon
Hallo Leon,
Als ich das gesehen habe, konnte ich es erst selbst nicht glauben, aber:
RewriteRule ^thread(\d+).html$ thread.php?threadid=$1 [L,QSA]
*argh* Ich bin ja ein Vollidiot! Der Apache versteht natürlich das '\d' nicht, weil er die POSIX-Regexp-Funktionen verwendet. Sorry, tut mir schrecklich leid!
So lautet es richtig:
RewriteRule ^thread([0-9]+).html$ thread.php?threadid=$1 [L,QSA]
Damit sollte es dann auch funktionieren.
Viele Grüße,
Christian
Ees hat sofort funktioniert. Habe jetzt noch diese Zeile eingefügt
RewriteRule ^board([0-9]+).html$ board.php?boardid=$1 [L,QSA]
und alles entspricht bisher meinen Wünschen.
Vielen vielen Dank für die Hilfe!
Leon
Ich würde jetzt also gerne diese URL
http://www.test.de/forum/thread.php?threadid=1273&sid=
in diese URL
http://www.test.de/forum/thread1273.html
umgewandeelt haben.
http://selfsuche.teamone.de/cgi-bin/hack.cgi?suchausdruck=rewrite+url&feld=text&index_5=on&hits=100