Problem MOD_REWRITE - Highlight

PhoenixDH

Erfahrenes Mitglied
Hallo zusammen,

ich habe eine SEO Forensoftware.
Leider ist die schon etwas älter und der SEO Mod wird nicht mehr unterstützt, somit bin ich alleine darauf angewiesen mein Problem zu lösen ;)

Also es geht um folgendes:
Nach dem Einbau des SEO Mods geht das Highlighting in einem Topic nicht mehr.
Jetzt möchte ich das ganze wieder in die mod_rewrite URL mit aufnhehmen.
Das Highlighting ist im QUellcode des FOrums eigentlich noch drin.

Eine URL sieht z.B. so aus:
http://www.xyz.de/xyz-t123.html
Dazu die Regel:
PHP:
RewriteRule ^.+-t([0-9]*).html$ viewtopic.php?t=$1 [L]

Das Highlighting soll so aussehen:
http://www.xyz.de/xyz-t123-h-suchwort.html
Wie müsste dann die Regel aussehen?
so:
PHP:
RewriteRule ^.+-t([0-9]*)-h-([a-zA-Z0-9]*).html$ viewtopic.php?t=$1&highlight=$2 [L]
Es sollen beliebig viele Zahlen und Buchstaben erlaubt sein für das Suchwort.

Dank euch!
 
Also wenn ich die Suche ausführe, dann wird diese URL generiert:
PHP:
viewtopic.php?t=9399&highlight=terrarium

Das wird automatisch aber umgeleitet zu
PHP:
hallo-aus-ostfriesland-t9399.html

Jetzt habe ich schon im Quellcode einer Forendatei gesucht und dort entsprechende Änderungen gemacht, denn die Forensoftware schreibt im Normallfall URLS in denen highlight vorkommt nicht um, aber wenn ich z.B. den Link von oben nehme und ihn umschreibe nach:
PHP:
xyz-t123-h-suchwort.html
kommt immer wieder ne Weiterleitung zu:
PHP:
xyz-t123.html
und verschluckt das -h-suchwort.

Hier mal noch die .htaccess:
PHP:
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.xyz\.de$ [NC]
RewriteRule (.*)$ http://www.xyz/Forum/$1 [L,R=301]

# Kategorien
RewriteRule ^.+-c([0-9]+).html$ index.php?c=$1 [L]

# User
RewriteRule ^.+-u([0-9]+).html$ profile.php?mode=viewprofile&u=$1 [L]

# Forum
RewriteRule ^.+-f([0-9]+).html$ viewforum.php?f=$1 [L]
RewriteRule ^.+-f([0-9]+)-s([0-9]+).html$ viewforum.php?f=$1&start=$2 [L]
RewriteRule ^.+-f([0-9]+)-p([0-9]+)-s([0-9]+).html$ viewforum.php?f=$1&topicdays=$2&start=$3 [L]
RewriteRule ^.+-f([0-9]+)-p([0-9]+).html$ viewforum.php?f=$1&topicdays=$2 [L]

#topic
RewriteRule ^.+-t([0-9]*).html$ viewtopic.php?t=$1 [L]
RewriteRule ^.+-t([0-9]*)-h-([a-z]*).html$ viewtopic.php?t=$1&highlight=$2 [L]
RewriteRule ^.+-t([0-9]*)-s([0-9]*).html$ viewtopic.php?t=$1&start=$2 [L]
RewriteRule ^.+-t([0-9]*)desc.html$ viewtopic.php?t=$1&postorder=desc [L]
RewriteRule ^.+-t([0-9]*)-p([0-9]*)-s([0-9]*).html$ viewtopic.php?t=$1&postdays=$2&postorder=asc&start=$3 [L]
RewriteRule ^.+-t([0-9]*)-p([0-9]*)desc-s([0-9]*).html$ viewtopic.php?t=$1&postdays=$2&postorder=desc&start=$3 [L]
RewriteRule ^.+-t([0-9]*)-p([0-9]*)desc.html$ viewtopic.php?t=$1&postdays=$2&postorder=desc [L]

RewriteRule ^.+-t([0-9]*)-p([0-9]*).html$ viewtopic.php?t=$1&postdays=$2&postorder=asc&start=0 [L]
 
Mmmh,

also wenn dies:

Code:
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www.xyz.de$ [NC]
RewriteRule (.*)$ http://www.xyz/Forum/$1 [L,R=301]

# Kategorien
RewriteRule ^.+-c([0-9]+).html$ index.php?c=$1 [L]

# User
RewriteRule ^.+-u([0-9]+).html$ profile.php?mode=viewprofile&u=$1 [L]

# Forum
RewriteRule ^.+-f([0-9]+).html$ viewforum.php?f=$1 [L]
RewriteRule ^.+-f([0-9]+)-s([0-9]+).html$ viewforum.php?f=$1&start=$2 [L]
RewriteRule ^.+-f([0-9]+)-p([0-9]+)-s([0-9]+).html$ viewforum.php?f=$1&topicdays=$2&start=$3 [L]
RewriteRule ^.+-f([0-9]+)-p([0-9]+).html$ viewforum.php?f=$1&topicdays=$2 [L]

#topic
RewriteRule ^.+-t([0-9]*).html$ viewtopic.php?t=$1 [L]
RewriteRule ^.+-t([0-9]*)-h-([a-z]*).html$ viewtopic.php?t=$1&highlight=$2 [L]
RewriteRule ^.+-t([0-9]*)-s([0-9]*).html$ viewtopic.php?t=$1&start=$2 [L]
RewriteRule ^.+-t([0-9]*)desc.html$ viewtopic.php?t=$1&postorder=desc [L]
RewriteRule ^.+-t([0-9]*)-p([0-9]*)-s([0-9]*).html$ viewtopic.php?t=$1&postdays=$2&postorder=asc&start=$3 [L]
RewriteRule ^.+-t([0-9]*)-p([0-9]*)desc-s([0-9]*).html$ viewtopic.php?t=$1&postdays=$2&postorder=desc&start=$3 [L]
RewriteRule ^.+-t([0-9]*)-p([0-9]*)desc.html$ viewtopic.php?t=$1&postdays=$2&postorder=desc [L]

RewriteRule ^.+-t([0-9]*)-p([0-9]*).html$ viewtopic.php?t=$1&postdays=$2&postorder=asc&start=0 [L]

...die richtige und komplette .htaccess ist, dann kann ich darin nichts finden, was diese ungewollte Umleitung(Umschreibung) erklären würde.
 
Ja, das ist die, ich kann dir ja mal noch den Part aus der PHP schicken:
Code:
	if ( preg_match('#viewtopic.php\?t=#', $url) ) {
		$prg=str_replace("viewtopic.php?","",$url);
		parse_str($prg, $prg_output);
		$highlight = preg_match( '#highlight#', $url) || preg_match( '#vote#', $url) || preg_match( '#newest#', $url);
		if (!$highlight) {
			$sql = "SELECT topic_title
			FROM " . TOPICS_TABLE . "
			WHERE topic_id = '".$prg_output['t']."'";
			if ( !($result = $db->sql_query($sql)) ) {
			message_die(GENERAL_ERROR, 'Could not obtain topic information', '', __LINE__, __FILE__, $sql);
			}
			if ( $row = $db->sql_fetchrow($result) ) {
				$start= preg_match('#start=0#', $url);
				$postdays = preg_match( '#postdays=0#', $url);
				if ($start) {
				$url = str_replace( 'viewtopic.php', '', $url );
				$url = str_replace( 'start=0', '', $url );
				}
				if ($postdays) {
					$url = str_replace( 'viewtopic.php', '', $url );
					$url = str_replace( 'postdays=0', '', $url );
				} else {
					$url = str_replace( 'viewtopic.php', '', $url );
				}
				$url1 = strtr($url,array("?t="=>"-t","&"=>"","amp;"=>"","asc"=>"","start="=>"-s","postdays="=>"-p","postorder="=>""));
				$url = urlencode(strtolower(str_replace($url_search, $url_replace, $row['topic_title'])));
				$url .= $url1. ".html";
			}
		}
	}

ALso ich werde da echt net schlau draus. Das oben ist der Originalcode, den ich schon geändert habe zu:
Code:
	if ( preg_match('#viewtopic.php\?t=#', $url) ) {
		$prg=str_replace("viewtopic.php?","",$url);
		parse_str($prg, $prg_output);
		$highlight = preg_match( '#vote#', $url) || preg_match( '#newest#', $url);
		if (!$highlight) {
			$sql = "SELECT topic_title
			FROM " . TOPICS_TABLE . "
			WHERE topic_id = '".$prg_output['t']."'";
			if ( !($result = $db->sql_query($sql)) ) {
			message_die(GENERAL_ERROR, 'Could not obtain topic information', '', __LINE__, __FILE__, $sql);
			}
			if ( $row = $db->sql_fetchrow($result) ) {
				$start= preg_match('#start=0#', $url);
				$postdays = preg_match( '#postdays=0#', $url);
				if ($start) {
				$url = str_replace( 'viewtopic.php', '', $url );
				$url = str_replace( 'start=0', '', $url );
				}
				if ($postdays) {
					$url = str_replace( 'viewtopic.php', '', $url );
					$url = str_replace( 'postdays=0', '', $url );
				} else {
					$url = str_replace( 'viewtopic.php', '', $url );
				}
				$url1 = strtr($url,array("?t="=>"-t","&"=>"","amp;"=>"","asc"=>"","start="=>"-s","postdays="=>"-p","postorder="=>"","highlight"=>"-h-"));
				$url = urlencode(strtolower(str_replace($url_search, $url_replace, $row['topic_title'])));
				$url .= $url1. ".html";
			}
		}
	}

Ich müsste mich mal daran setzen in Ruhe die Woche.
Denn das wird bemängelt, bei 3500 Usern und etlichen 10 000 Threads im Board sollte das schon klappen irgendwie.

Edit:
Wenn ich den Code so einbaue, werden die Links in den Suchergebnissen automatisch zu:
http://www.xyz.de/xyz-t123-h-suchwort.html

ABer wenn ich in den Suchergebnissen dfann auf nen Link klicke komme ich wieder hier raus:
http://www.xyz.de/xyz-t123.html
 
Zuletzt bearbeitet:
Ich habe hier noch ne Codestelle gefunden:
PHP:
if ($vtopic AND $HTTP_GET_VARS['t']) {

	$keyurl=$page_title;

	$search = array( 'ú','ù', 'Ö', 'Ä', 'Ü', 'ö', 'ä', 'à', 'é', 'è', 'ü', ' ', ".", "'", '#', '&', '/','ß','+','€','§','$','%','?','!',':',';','[',']',',','´','`','*','°','(',')','²','³');

	$replace = array( 'u','u','oe', 'ae', 'ue', 'oe', 'ae', 'a', 'e', 'e', 'ue', '-', "", "", '', '-und-', '-','ss','','euro','','','','','','','','','','','-','-','-','-','-','-','2','3');

	$keyurl=str_replace($search, $replace, "$keyurl");

	$keyurl = strtolower($keyurl);

	$seite = $_SERVER['REQUEST_URI'];

	if (strrpos($seite,'/') > 0)

	$seite = substr($seite, strrpos($seite,'/'));

	$start=$HTTP_GET_VARS['start'];
	$high=$HTTP_GET_VARS['highlight'];

	$tid=$HTTP_GET_VARS['t'];

	if ($seite !="/$keyurl-t$tid.html" and $seite != "/$keyurl-t$tid-s$start.html") {

		header("HTTP/1.1 301 Moved Permanently");

	if (intval($start) > 0)

		header("Location: $keyurl-t$tid-s$start.html");

	else

		header("Location: $keyurl-t$tid.html");
	}


}
Kann es auch damit zu tun haben?
 
Kann es auch damit zu tun haben?

Da würd ich 3 Schnitzel drauf wetten :)

$start=$HTTP_GET_VARS['start'];
$high=$HTTP_GET_VARS['highlight'];

$tid=$HTTP_GET_VARS['t'];

if ($seite !="/$keyurl-t$tid.html" and $seite != "/$keyurl-t$tid-s$start.html") {

header("HTTP/1.1 301 Moved Permanently");

if (intval($start) > 0)

header("Location: $keyurl-t$tid-s$start.html");

else

header("Location: $keyurl-t$tid.html");
}


Dieser Code vergleicht den bereinigten Seitentitel mit der angefragten Adresse(rot markiert).
Dieser Vergleich schlägt fehl, weil in der angeforderten Adresse noch das
Code:
-h-suchwort
drinnen ist, was im Seitentitel vermutlich nicht vorkommt.

Du könntest versuchen, vor dem Vergleich aus der Variable $seite per RegExp diesen String zu entfernen.

Alles in allem macht dieses SEO-Module jedoch einen ziemlich verworrenen Eindruck, es scheint sich selbst irgendwie im Kreise zu drehen.
 
Hm, das verstehe ich net ganz!
Könnte ich auch in deiner rot markierten Zeile das -h- mit aufnehmen?

Ja, das ganze System ist schon ein paar Jahre alt, aber greifr zu arg ein das ich das umstellen könnte.
Es gibt auch leider keinen Support mehr dazu, selbst die Entwicklerseite gibt es nicht mehr.

---------------------------

Ich hab mal noch ein bisschen getestet, das hier würde klappen, aber ka ob das Sinn macht:
$tid=$HTTP_GET_VARS['t'];
$high=$HTTP_GET_VARS['highlight'];

if ($seite !="/$keyurl-t$tid.html" and $seite != "/$keyurl-t$tid-s$start.html" and $seite != "/$keyurl-t$tid-h-$high.html") {

header("HTTP/1.1 301 Moved Permanently");

if (intval($start) > 0)

header("Location: $keyurl-t$tid-s$start.html");

elseif ($high != "")

header("Location: $keyurl-t$tid-h-$high.html");


else

header("Location: $keyurl-t$tid.html");
}

Oder kann ich den Part auch ganz löschen?
 
Zuletzt bearbeitet:
Zurück