Seite 28 von 41

Verfasst: 17.06.2008 21:32
von dieweltist
@Dave danke. Der Sinn mit der .htaccess ist der, wie ich am Schluss schrieb. Nämlich dass alle solche URLs, wie die vorletzte, jeweils in eine solche umgewandelt werden, wie die letzte URL in meinem Beitrag. Klicke doch auf diese drauf und Du siehst, dass eben dieser Beitrag korrekt aufgerufen wird. Das ist das Prinzip.

Falls miene Rewrite Rule funktioniert, kann jeder wählen, welche Variante der Fehlerbehebung er umsetzen möchte. Oder beide, dann können auch sämtliche URLs aufgerufen werden, wenn die Theadseitenangabe (bspw. -s30) in der URL fehlt.

Es lohnt sich übrigens meines Erachtens sowieso, die Syntax von Mod Rewrite zu erlernen. Man kann nämlich viel damit machen, um URLs wunschgemäß anzupassen. Wie das System jeweils URLs ausgibt, darauf hat Mod Rewrite keinen Einfluss. Sondern nur, dass URLs, die man aufruft, entsprechend umgewandelt werden in so ein Muster, die das System versteht.

Verfasst: 17.06.2008 21:43
von Dave
Da meine eigentlich die richtige ist (vom gewünschten code her) würde ich das vorschlagen ;) Weil was neues hinzufügen um nen bug zu beheben finde ich nen komischen weg :D

Verfasst: 18.06.2008 12:18
von dieweltist
Die .htaccess habe ich grundlegend überarbeitet, weil in dieser zahlreiche Anfängerfehler waren, obwohl ich selbst auch noch ein Mod-Rewrite-Anfänger bin. Da waren jeweils im ersten Teil unnötige Klammern, die weder eine Mengenangabe enthielten, noch im zweiten Teil der Rewrite Rule eine Entsprechung hatten.

Die doch sehr "gefräßige" Mengenangabe .* wurde meines Erachtens oftmals ziemlich unüberlegt angewendet, obwohl es da jeweils besser gewesen wäre, wenigstens das Slash / auszuschließen und/oder die Mengenangabe auf 1 bis unendlich zu begrenzen. Auch wurde stets vergessen, jeweils im ersten Teil der Rewrite Rule den Punkt . vor html zu escapen mit einem Backslash \.

Code: Alles auswählen

RewriteEngine on
RewriteBase /
RewriteRule ^[^/]*-f([0-9]*)/[^/]*-t([0-9]+)-s([0-9]+)\.html viewtopic.php?f=$1&t=$2&start=$3&%{QUERY_STRING} [L]
RewriteRule ^[^/]*-f([0-9]*)/[^/]*-t([0-9]+)\.html viewtopic.php?f=$1&t=$2&%{QUERY_STRING} [L]
RewriteRule ^[^/]*-f([0-9]*)/index-s([0-9]+)\.html viewforum.php?f=$1&start=$2&%{QUERY_STRING} [L]
RewriteRule ^[^/]*-f([0-9]*)/ viewforum.php?f=$1&%{QUERY_STRING} [L]
RewriteRule ^[^/]*-f([0-9]*) viewforum.php?f=$1&%{QUERY_STRING} [L]
Wenn ich mich jetzt nicht irre, müsste man die letzten beiden Zeilen durch eine ersetzen können, indem man angibt, dass der Slash ein oder kein mal vorhanden sein darf.

Code: Alles auswählen

RewriteRule ^[^/]*-f([0-9]*)/? viewforum.php?f=$1&%{QUERY_STRING} [L]
Und weil weitere Zeichen folgen dürfen, und somit auch ein Slash /, kann diese Angabe eigentlich sogar ganz entfallen.

Code: Alles auswählen

RewriteRule ^[^/]*-f([0-9]*) viewforum.php?f=$1&%{QUERY_STRING} [L]
Die Angabe, dass jeweils der {QUERY_STRING} mit übergeben werden soll (das ist derjenige Teil der URL, der hinter dem Fragezeichen ist), kann man einfacher mit der Angabe QSA (Query String Append) bewerkstelligen. Das habe ich jetzt hier gelesen: Klick! (Auf dieser Seite nach SESSIONID suchen!)

Code: Alles auswählen

RewriteEngine on
RewriteBase /
RewriteRule ^[^/]*-f([0-9]*)/[^/]*-t([0-9]+)-s([0-9]+)\.html viewtopic.php?f=$1&t=$2&start=$3&% [L,QSA]
RewriteRule ^[^/]*-f([0-9]*)/[^/]*-t([0-9]+)\.html viewtopic.php?f=$1&t=$2&% [L,QSA]
RewriteRule ^[^/]*-f([0-9]*)/index-s([0-9]+)\.html viewforum.php?f=$1&start=$2&% [L,QSA]
RewriteRule ^[^/]*-f([0-9]*) viewforum.php?f=$1&% [L,QSA]

Verfasst: 21.06.2008 14:54
von dieweltist
Mir ist aufgefallen, dass der interne Link zum Forum, der unter der Navigation ist, noch eine Nicht-SEO-URL ist.

http://forumtreff.pytalhost.de/dein-erstes-forum-f2/

http://forumtreff.pytalhost.de/viewforu ... =d&start=0


Nicht jede Seite kann über die ursprüngliche dynamische URL aufgerufen werden. Auch dadurch ist es nur noch eingeschränkt möglich, über entsprechende Einfügung von Umleitungsanweisungen in die .htaccess, weitere Möglichkeiten des Aufrufens von bestimmten Forenseiten zu kreieren. Aber auch, wenn man dabei bei den statischen URLs ansetzt, um neue URL-Umleitungen zu realisieren, funktionieren manche Muster gar nicht, die beim Nicht-SEO-phpBB3 noch funktionierten.

Auch kann ich jetzt nicht mehr zwei SEO-phpBB-Boards mit jeweils unterschiedlicher Anzeige von Beiträgen je Seite laufen lassen, was mit der Nicht-SEO-Version ohne umfangreiche Anpassungen möglich war. Sobald ich eine Seite der anderen Installation aufrufe, wird die URL nach dem Aufruf von allein zur ersten zurückgeschaltet.

Ein Forum aufrufen; funktioniert noch.
http://forumtreff.pytalhost.de/viewforum.php?f=2

Einen Thread in einem Forum aufrufen; funktioniert auch.
http://forumtreff.pytalhost.de/viewtopic.php?f=2&t=1

Einen Beitrag eines Threads eines Forums; funktioniert zwar, aber der Beitrag wird mit Anker aufgerufen. Aber die Thread-ID muss stimmen und muss somit bekannt sein. Auch muss die Angabe über die Threadseite in der URL enthalten sein, sonst führt der Link zur ersten Threadseite.
http://forumtreff.pytalhost.de/viewtopi ... =2&t=1&p=1

Einen Beitrag mit Anker eines Threads eines Forums; funktioniert nicht, es erscheint nur das Forum.
http://forumtreff.pytalhost.de/viewtopi ... t=1&p=1#p1

Einen Thread aufrufen; funktioniert.
http://forumtreff.pytalhost.de/viewtopic.php?t=1

Einen Beitrag eines Threads aufrufen; funktioniert zwar, aber der Beitrag wird mit Anker aufgerufen. Aber die Thread-id muss stimmen und muss somit bekannt sein. Auch muss die Angabe über die Threadseite in der URL enthalten sein, sonst führt der Link zur ersten Threadseite.
http://forumtreff.pytalhost.de/viewtopic.php?t=1&p=1

Einen Beitrag mit Anker eines Threads aufrufen; funktioniert nicht, es erscheint nur das Forum.
http://forumtreff.pytalhost.de/viewtopic.php?t=2&p=1#p1

Einen Beitrag aufrufen; funktioniert zwar, aber der Beitrag wird mit Anker aufgerufen.
http://forumtreff.pytalhost.de/viewtopic.php?p=1

Einen Beitrag mit Anker eines Threads aufrufen; funktioniert nicht, es erscheint nur das Forum.
http://forumtreff.pytalhost.de/viewtopic.php?p=1#p1

Interne Links der FAQ funktionieren nicht

Verfasst: 22.06.2008 15:16
von dieweltist
Beim SEO-phpBB3 funktionieren die Links in der FAQ nicht. Es ist nicht nur bei meinem Forum so, das zur Zeit deaktiviert ist; sondern ich habe auch ein SEO-phpBB3 gefunden. Und bei diesem gehen diese internen Links auch nicht in der FAQ: Klick! Es erscheint jeweils die Forenübersicht (Indexseite).

Verfasst: 22.06.2008 16:11
von ill66
tatsache. dann hat es sicher die gleiche ursache, dass wenn ich auf Thema teilen > "Ansicht erweitern" klicke, ich auf auf die hauptseite umgeleitet werde... :\

was dave und du zur lösung meines anderen problems geschrieben hat, verunsichert mich ein bisschen^^°

Verfasst: 22.06.2008 16:54
von dieweltist
Stimmt; ich komme beim internen Link "Ansicht erweitern" auch auf die Übersicht- bzw. Indexsseite. Aber obwohl dieser Link bei der Nicht-SEO-Version funktionierte, hatte ich dessen Sinnhaftigkeit damals nicht erkennen können.

Verfasst: 22.06.2008 21:52
von Schnally
Kann man das irgendwie ändern, so dass das mit dem Anker wieder funktioniert?
Ist ja sonst schon sinnlos, wenn man einzelne Beiträge eines Threads nicht aufrufen kann.

Verfasst: 22.06.2008 23:26
von dieweltist
@Schnally; das verstehe ich nicht. Was meinst Du? Einen Beitrag ohne Anker aufzurufen, ist scheinbar beim SEO-phpBB3 nicht möglich. Aber mit Anker, das funktioniert doch. Oder meinst Du die FAQ? Dort gehen die internen Links mit Anker leider nicht.

Verfasst: 23.06.2008 06:16
von Dave
Naja... Das nen posting direkt aufgerufen wird mit anker hat ja an sich schon seinen sinn...
Aber wenn du nen Beitrag direkt aufrufen willst ohne Anker müßtest du folgenden Code ändern:
viewtopic.php

Code: Alles auswählen

if ( isset($_GET['p']) && !$hilit_words )
{
	$post_url = generate_seourl_topic($topic_data['topic_id'], $topic_data['topic_title'], $topic_data['forum_id'], $topic_data['forum_name']);
	$post_url = generate_seo_lastpost($topic_data['topic_replies'], $post_url ) . '#p' . $post_id;
	header("HTTP/1.1 301 Moved Permanently");
	header("Location: $post_url");
	die;
}
in

Code: Alles auswählen

if ( isset($_GET['p']) && !$hilit_words )
{
	$post_url = generate_seourl_topic($topic_data['topic_id'], $topic_data['topic_title'], $topic_data['forum_id'], $topic_data['forum_name']);
	$post_url = generate_seo_lastpost($topic_data['topic_replies'], $post_url );
	header("HTTP/1.1 301 Moved Permanently");
	header("Location: $post_url");
	die;
}
Dann passt es :wink: