SEO Urls V2

In diesem Forum können Mod-Autoren ihre Mods vorstellen, die sich noch im Entwicklungsstatus befinden. Der Einbau in Foren im produktiven Betrieb wird nicht empfohlen.
Forumsregeln
phpBB 2.0 hat das Ende seiner Lebenszeit überschritten
phpBB 2.0 wird nicht mehr aktiv unterstützt. Insbesondere werden - auch bei Sicherheitslücken - keine Patches mehr bereitgestellt. Der Einsatz von phpBB 2.0 erfolgt daher auf eigene Gefahr. Wir empfehlen einen Umstieg auf phpBB 3.0, welches aktiv weiterentwickelt wird und für welches regelmäßig Updates zur Verfügung gestellt werden.
Benutzeravatar
mgutt
Mitglied
Beiträge: 2999
Registriert: 31.08.2004 16:44
Wohnort: Hennef
Kontaktdaten:

Beitrag von mgutt »

zuerst mal die neue version (auch im downloadpaket enthalten), denn in der letzten war ein kleiner bug:

Code: Alles auswählen

function append_sid($url, $non_html_amp = false, $seo_title = '')  // Seo Urls Begin Version 1.1.6
{
	global $SID, $phpEx, $topic_title, $forum_name;

	// if url contains a session we won't rewrite
	if ( !empty($SID) && !preg_match('#sid=#', $url) )
	{
		$url .= ( ( strpos($url, '?') !== false ) ?  ( ( $non_html_amp ) ? '&' : '&' ) : '?' ) . $SID;
		return $url;
	}

	//
	// USERSETTINGS BEGIN
	//

	// replace "true" with "false" to deactivate seo urls
	$seo_active = true;

	// Disallow rewritting for:
	// - specific url parms (f.e. 'mode=confirm', )
	// - files (f.e. "memberlist.$phpEx", )
	// - folders (f.e. 'includes/', )
	//
	$seo_forbidden = array(
		'login',
		'mode=confirm',
		'mark=topics',
		'view=',
	);

	//
	// USERSETTINGS END
	//

	// start rewritting if allowed
	if ( $seo_active )
	{
		foreach ( $seo_forbidden as $forbidden )
		{
			if ( $url == $forbidden || strpos($url, $forbidden) !== false )
			{
				$seo_active = false;
				break;
			}
		}
	}
	if ( !$seo_active || $url == './' )
	{
		return $url;
	}
	elseif ( $seo_active && !defined('IN_ADMIN') )
	{
		// Hash Fix: If hash is in the given URL it is seperated. This is caused by some incompatibility of some false written mods
		if (strpos($url, '#') !== false)
		{
			$hash = strstr($url, '#');
			$url = substr($url, 0, strpos($url, '#'));
		}
		else
		{
			$hash = '';
		}

		// Jumpbox Fix
		if ( strpos($url, 'viewforum') !== false && strpos($url, 'f=') === false )
		{
			return $url;
		}

		// Search Author's posts URL
		if ( strpos($url, 'search_author') !== false )
		{
			$author_name = substr(strrchr($url, 'search_author='), 14);
			if ( preg_match('#[^_a-zA-Z0-9-.]#', $author_name) )
			{
				return $url;
			}
		}

		// Rewrite Urls
		$url_amp = ( $non_html_amp ) ? '&' : '&';
		$url_parms = array( (strpos($url, 'highlight=') !== false && $url{strlen($url)-1} == '=' ? $url_amp . 'highlight=' : ''), $url_amp . 'start=0', $url_amp . 'postdays=0', $url_amp . 'postorder=asc', $url_amp . 'topicdays=0', ".$phpEx?", ".$phpEx", '=', '&', '&');
		$url_rparms = array(                                                                                                  '',                   '',                      '',                         '',                       '',        ',',   '.html', ',',     ',', ',');
		$url = str_replace($url_parms, $url_rparms, $url);
		$url = $url . ( strpos($url, '.html') !== false ? '' : '.html' );

		// Title to url - forums and topics need special settings
		if ( (!empty($forum_name) || !empty($seo_title) ) && strpos($url, 'viewforum') !== false )
		{
			$seo_title = empty($seo_title) ? $forum_name : $seo_title;
			$seo_base = 'viewforum';
			$seo_search = array($seo_base,'-,f,');
			$seo_replace = array(      '',  '-f');
			$seo_empty = 'forum';
		}
		elseif ( (!empty($topic_title) || !empty($seo_title) ) && strpos($url, 'viewtopic') !== false )
		{
			$seo_title = empty($seo_title) ? $topic_title : $seo_title;
			$seo_base = 'viewtopic';
			$seo_search = array($seo_base,'-,t,','-,p,');
			$seo_replace = array(      '',  '-t',  '-p');
			$seo_empty = 'topic';
		}

		// Title to url - replace special chars and build url
		if ( !empty($seo_base) && !empty($seo_title) && strpos($url, $seo_base) !== false )
		{
			// special chars
			$char_search = array(  'Ö', 'Ä', 'Ü', 'ö', 'ä','à','é','è','í', 'ü', 'ß',' ','.',',','"','&','<', '>',  '+','–','/','_',  '&');
			$char_replace = array('oe','ae','ue','oe','ae','a','e','e','i','ue','ss','-','-','-',      '',  'und',    '',     '','und','-','-','-','und');
			// generate url with title
			$seo_title = str_replace($char_search, $char_replace, strtolower($seo_title) . '-');
			if ( preg_match('#[^a-z0-9-]#', $seo_title) )
			{
				$seo_title = preg_replace('#[^\w- ]#', '', $seo_title);
			}
			// reduce hyphen to one
			$seo_title = preg_replace("#([\-])+#", "\\1", $seo_title);
			// replace empty title if necessary
			$url = $seo_title == '-' ? $seo_empty . $seo_title . $url : $seo_title . $url;
			// clean url
			$url = str_replace($seo_search, $seo_replace, $url);
		}
		// Hash Fix
		$url = $url . $hash;
	}
	return $url;
} // Seo Urls End
meine Foren: http://www.maxrev.de/communities.htm
Ich kaufe Dein Forum! Angebote bitte an marc at gutt punkt it
heini
Mitglied
Beiträge: 50
Registriert: 07.11.2004 11:03
Wohnort: Wachtberg

Beitrag von heini »

Was ein Code ist das denn? Wo kommt der denn rein?

Ciao

Martin
Kortirion
Mitglied
Beiträge: 485
Registriert: 03.05.2004 05:07
Wohnort: Kassel
Kontaktdaten:

Beitrag von Kortirion »

Bezüglich http://www.phpbb.de/viewtopic.php?p=723839#723839

Jetzt geht der Server wieder...sorry für den Ausfall letzte N8. :oops:
...mehr über mich: www.kortirion.de oder www.schwarzer-humbug.de ...oder auch nicht...egal.
Neuestes Projekt: www.das-buchforum.de
Benutzeravatar
Raydan
Mitglied
Beiträge: 29
Registriert: 11.05.2006 19:24
Kontaktdaten:

Beitrag von Raydan »

Hallo zusammen :)

Ich habe wieder ein Problem mit diesem wirklich großartigen Mod.

In einem Thread mit mehreren Seiten ist es in der viewtopic.php unmöglich die Seiten zu wechseln. Die einzige Möglichkeit ist, es über die viewforum.php zu machen.

Beispiel:
Thread Seite 1 / 2, der Link auf Seite 2 sowie der "Weiter"-Link führen zu:
{url}unerwarteter-zuwachs-t83,,start,15.html
(Ein Komma zuviel)

Beispiel 2:
Thread auf Seite 2 / 2, der Link auf Seite 1 sowieso der "Zurück"-Link führen zu:
{url}unerwarteter-zuwachs-t83,.html
(Wieder ein Komma zuviel)

Daher meine Frage: Wo kommt dieses Komma her und wie bekomm ich es weg? ^^;

Die Datei kann man einsehen unter: http://www.nagerinfos.de/viewtopic.txt

Bin um jede Hilfe dankbar :)
Benutzeravatar
mgutt
Mitglied
Beiträge: 2999
Registriert: 31.08.2004 16:44
Wohnort: Hennef
Kontaktdaten:

Beitrag von mgutt »

@ raydan
Das liegt daran, weil der Programmierer des Mods "printer topic bzw. report post" die Urls falsch generiert (am Ende steht immer ein Ampersand, obwohl keine Variable mehr folgt). Aber ich habe mich entschieden anstatt dass jeder selbst die Urls anpasst, dass mein Code nun Fehler in der Url automatisch korrigiert, da ers häufiger vorkam, dass andere Mods schlichtweg falsch geschrieben wurden. Aber so spare ich mir auch Arbeit, weil man nicht andauernd anderer Leuts Mods umschreiben muss.

Ich habe zum Test eine extrem falsch Url eingegeben:

Code: Alles auswählen

echo(append_sid("viewtopic.$phpEx?&&?t==83&?&start===15&&&", '', 'Unerwarteter Zuwachs'));
Also mit vielen Gleichheits-, Frage- und Undzeichen. Ähnlich der Prüfung, ob ein Rautezeichen enthalten ist werden nun fehlerhafte Urls gesäubert und das Ergebnis ist dann:

Code: Alles auswählen

unerwarteter-zuwachs-t83,start,15.html
Damit steht dann die Version 1.1.7 (wie zuvor gefragt, muss man in der sessions.php einfach die bestehende Funktion "append_sid" von der 1. geschweiften bis zu letzten geschweiften klammer ersetzen)

Code: Alles auswählen

function append_sid($url, $non_html_amp = false, $seo_title = '')  // Seo Urls Begin Version 1.1.7
{
	global $SID, $phpEx, $topic_title, $forum_name;

	// if url contains a session we won't rewrite
	if ( !empty($SID) && !preg_match('#sid=#', $url) )
	{
		$url .= ( ( strpos($url, '?') !== false ) ?  ( ( $non_html_amp ) ? '&' : '&' ) : '?' ) . $SID;
		return $url;
	}

	//
	// USERSETTINGS BEGIN
	//

	// replace "true" with "false" to deactivate seo urls
	$seo_active = true;

	// Disallow rewritting for:
	// - specific url parms (f.e. 'mode=confirm', )
	// - files (f.e. "memberlist.$phpEx", )
	// - folders (f.e. 'includes/', )
	//
	$seo_forbidden = array(
		'login',
		'mode=confirm',
		'mark=topics',
		'view=',
	);

	//
	// USERSETTINGS END
	//

	// start rewritting if allowed
	if ( $seo_active )
	{
		foreach ( $seo_forbidden as $forbidden )
		{
			if ( $url == $forbidden || strpos($url, $forbidden) !== false )
			{
				$seo_active = false;
				break;
			}
		}
	}
	if ( !$seo_active || $url == './' )
	{
		return $url;
	}
	elseif ( $seo_active && !defined('IN_ADMIN') )
	{
		// Hash Fix: If hash is in the given URL it is seperated. This is caused by some incompatibility of some false written mods
		if (strpos($url, '#') !== false)
		{
			$hash = strstr($url, '#');
			$url = substr($url, 0, strpos($url, '#'));
		}
		else
		{
			$hash = '';
		}

		// Title is Array Fix: If topic or forum title is an array it is deleted. This is caused by some incompatibility of some false written mods
		if ( is_array($topic_title) )
		{
			$topic_title = '';
		}
		elseif ( is_array($forum_name) )
		{
			$forum_name = '';
		}

		// Jumpbox Fix
		if ( strpos($url, 'viewforum') !== false && strpos($url, 'f=') === false )
		{
			return $url;
		}

		// Search Author's posts url
		if ( strpos($url, 'search_author') !== false )
		{
			$author_name = substr(strrchr($url, 'search_author='), 14);
			if ( preg_match('#[^_a-zA-Z0-9-.]#', $author_name) )
			{
				return $url;
			}
		}

		// Rewrite url
		$url_amp = ( $non_html_amp ) ? '&' : '&';
		$url_parms = array((strpos($url, 'highlight=') !== false && $url{strlen($url)-1} == '=' ? $url_amp . 'highlight=' : ''),$url_amp . 'start=0',$url_amp . 'postdays=0',$url_amp . 'postorder=asc',$url_amp . 'topicdays=0',".$phpEx?",".$phpEx",'=','&','&','?');
		$url_rparms = array(                                                                                                 '',                  '',                     '',                        '',                      '',       ',',  '.html',',',    ',',',', '');
		$url = str_replace($url_parms, $url_rparms, $url);
		// Double Comma Fix: If a comma is repeated directly after an other the second one is deleted. This is caused by some incompatibility of some false written mods
		$url = preg_replace("#([\,])+#", "\\1", $url);
		// End Comma Fix: If a comma is the last char in the url it is deleted. This is caused by some incompatibility of some false written mods
		$url = rtrim($url, ",");
		// Build url
		$url = $url . ( strpos($url, '.html') !== false ? '' : '.html' );

		// Title to url - forums and topics need special settings
		if ( (!empty($forum_name) || !empty($seo_title) ) && strpos($url, 'viewforum') !== false )
		{
			$seo_title = empty($seo_title) ? $forum_name : $seo_title;
			$seo_base = 'viewforum';
			$seo_search = array($seo_base,'-,f,');
			$seo_replace = array(      '',  '-f');
			$seo_empty = 'forum';
		}
		elseif ( (!empty($topic_title) || !empty($seo_title) ) && strpos($url, 'viewtopic') !== false )
		{
			$seo_title = empty($seo_title) ? $topic_title : $seo_title;
			$seo_base = 'viewtopic';
			$seo_search = array($seo_base,'-,t,','-,p,');
			$seo_replace = array(      '',  '-t',  '-p');
			$seo_empty = 'topic';
		}

		// Title to url - replace special chars and build url
		if ( !empty($seo_base) && !empty($seo_title) && strpos($url, $seo_base) !== false )
		{
			// special chars
			$char_search = array(  'Ö', 'Ä', 'Ü', 'ö', 'ä','à','é','è','í', 'ü', 'ß',' ','.',',','"','&','<', '>',  '+','–','/','_',  '&');
			$char_replace = array('oe','ae','ue','oe','ae','a','e','e','i','ue','ss','-','-','-',      '',  'und',    '',     '','und','-','-','-','und');
			// generate url with title
			$seo_title = str_replace($char_search, $char_replace, strtolower($seo_title) . '-');
			if ( preg_match('#[^a-z0-9-]#', $seo_title) )
			{
				$seo_title = preg_replace('#[^\w- ]#', '', $seo_title);
			}
			// reduce hyphen to one
			$seo_title = preg_replace("#([\-])+#", "\\1", $seo_title);
			// replace empty title if necessary
			$url = $seo_title == '-' ? $seo_empty . $seo_title . $url : $seo_title . $url;
			// clean url
			$url = str_replace($seo_search, $seo_replace, $url);
		}
		// Hash Fix
		$url = $url . $hash;
	}
	return $url;
} // Seo Urls End
Kortirion hat geschrieben:Bezüglich http://www.phpbb.de/viewtopic.php?p=723839#723839

Jetzt geht der Server wieder...sorry für den Ausfall letzte N8. :oops:
brauchst du noch Hilfe oder hast Du meine Antwort verarbeiten können und damit den Fehler bändigen können?


@ all
Entschuldigt die letzten Updates, aber ich denke es ist besser für alle, wenn man evtl. Fehler aus anderen Mods herausfiltert, anstatt dass andauernd nachgebessert werden muss. Die meisten Mods sollten dann in Zukunft ohne jegliche Anpassungen funktionieren. Und ich denke das kommt jedem entgegen.
meine Foren: http://www.maxrev.de/communities.htm
Ich kaufe Dein Forum! Angebote bitte an marc at gutt punkt it
IPB_Flüchtling
Mitglied
Beiträge: 1862
Registriert: 23.12.2004 22:46

Beitrag von IPB_Flüchtling »

Ahoi,

kurzes Feedback zur Version 1.1.7: Bislang keine Fehler entdeckt! (kein Firefox-Problem, überall Bindestriche zwischen den Wörtern in den Titeln)

Danke! :P

LG, IPB_Flüchtling
darklordi
Mitglied
Beiträge: 323
Registriert: 13.12.2004 16:26
Wohnort: Langenfeld
Kontaktdaten:

Beitrag von darklordi »

hmm, ehm,
was genau muss ich jetzt wo ändern damit wirklich alle Beiträge die Bindestriche für die Leerzeilen in der url haben ?
bazillus
Mitglied
Beiträge: 149
Registriert: 15.12.2005 17:53
Wohnort: NWM
Kontaktdaten:

Beitrag von bazillus »

ich hätte da noch einen Link bzw. eine Frage,

/album.php?user_id=2&sort_method=pic_time&sort_order=DESC&mode=list&type=pic&start=12
wird zu
/album,user_id,2,sort_method,pic_time,sort_order,DESC,mode,list,type,pic.html,start,12
mit einem 404er

verschiebt man beim Link, der mit dem 404 endet, das .html ans Ende des Links funktioniert er - Link sieht dann so aus:
album,user_id,2,sort_method,pic_time,sort_order,DESC,mode,list,type,pic,start,12.html

Hab mir die aktuelle Version nicht weiter angeschaut, begrenzt Du irgendwo die Anzahl der Variablen oder warum erscheint das .html zu früh?
Kortirion
Mitglied
Beiträge: 485
Registriert: 03.05.2004 05:07
Wohnort: Kassel
Kontaktdaten:

Beitrag von Kortirion »

mgutt hat geschrieben:
Kortirion hat geschrieben:Bezüglich http://www.phpbb.de/viewtopic.php?p=723839#723839

Jetzt geht der Server wieder...sorry für den Ausfall letzte N8. :oops:
brauchst du noch Hilfe oder hast Du meine Antwort verarbeiten können und damit den Fehler bändigen können?
mgutt: Ich hab mich da ehrlich gesagt noch nicht an den Code gemacht (wie gesagt, das ist mir im Ggs. zu dem Last Post on Index nicht so wichtig). Wenn ich die Zeit finde, werde ich mich aber wohl testweise mal dran setzen.
...mehr über mich: www.kortirion.de oder www.schwarzer-humbug.de ...oder auch nicht...egal.
Neuestes Projekt: www.das-buchforum.de
IPB_Flüchtling
Mitglied
Beiträge: 1862
Registriert: 23.12.2004 22:46

Beitrag von IPB_Flüchtling »

@darklordi:

Du ersetzt die function append_sid in der session.php durch die Variante, die hier steht:

http://www.phpbb.de/viewtopic.php?p=724173#724173

@bazillus:

Wenn Du die Usersettings in mgutts function append_sid richtig setzt, müsste das 404er-Problem beseitigt sein:

Code: Alles auswählen

   // Disallow rewritting for: 
   // - specific url parms (f.e. 'mode=confirm', ) 
   // - files (f.e. "memberlist.$phpEx", ) 
   // - folders (f.e. 'includes/', ) 
   // 
   $seo_forbidden = array(
      'login',
      'mode=confirm',
      'mark=topics',
      'view=',
      'mode=unread',
      'return_to_list',
   );
Dort musst Du halt noch etwas wie sort_method ins Array aufnehmen.

LG, IPB_Flüchtling
Antworten

Zurück zu „phpBB 2.0: Mods in Entwicklung“