Seite 1 von 1

Problem mit SEO URLS

Verfasst: Di 11. Jan 2011, 13:53
von michael_engholm
Hallo,
ich habe ein kleines Problem mit den SEO URLS...

In http://forum.contenido.org/viewtopic.php?f=64&t=23280 heist es im ersten Post:
$cfg['url_builder']['name'] = 'front_content';
$cfg['url_builder']['config'] = array();
/*
// Example setting for UrlBuilder 'custom_path':
$cfg['url_builder']['name'] = 'custom_path';
$cfg['url_builder']['config'] = array('prefix' => 'rocknroll', 'suffix' => '.4fb', 'separator' => ',');
*/
aber genau diese /* und */ kann ich im code nicht finden.

Mein Code sieht an der Stell so ... aus

Code: Alles auswählen

UrlBuilder settings
 * ----------------------------------
 * 
 * Configuration of UrlBuilder to use.
 *
 * Example setting for UrlBuilder 'front_content' (generates URLs like '/cms/front_content.php?idcat=2&lang=1'):
 * $cfg['url_builder']['name']   = 'front_content';
 * $cfg['url_builder']['config'] = array();
 *
 * Example setting for UrlBuilder 'custom_path' (generates URLs like '/cms/Was-ist-Contenido/rocknroll,a,2.4fb'):
 * $cfg['url_builder']['name']   = 'custom_path';
 * $cfg['url_builder']['config'] = array('prefix' => 'rocknroll', 'suffix' => '.4fb', 'separator' => ',');
 *
 * See also http://forum.contenido.org/viewtopic.php?f=64&t=23280
 */
// (string)  Name of UrlBuilder to use.
//           Feasible values are 'front_content', 'custom', 'custom_path' or a user defined name. 
//           Check out Contenido_UrlBuilderFactory::getUrlBuilder() in
//           contenido/classes/UrlBuilder/Contenido_UrlBuilderFactory.class.php for more details 
//           about this setting.
$cfg['url_builder']['name']   = 'front_content';

// (array)  Default UrlBuilder configuration.
// An associative configuration array which will be passed to the UrlBuilder instance.
//          Values depend on used UrlBuilder.
$cfg['url_builder']['config'] = array();


/**
 * 


Vielen Dank schon mal
Michael

Re: Problem mit SEO URLS

Verfasst: Di 11. Jan 2011, 23:52
von xmurrix
Hallo michael_engholm,

erstmal Willkommen im Contenido-Forum.

Der Beitrag ist nicht auf dem neuesten Stand und der Inhalt der betroffenen Datei "config.misc.php" hat sich im Laufe der Zeit etwas geändert. Im Grunde kannst du in der "config.misc.php" deinen UrlBuilder folgendermaßen konfigurieren:

Code: Alles auswählen

// name des zu verwendenden urlbuilders ('front_content', 'custom', 'custom_path' oder dein eigener urlbuilder)
// typ is ein string
$cfg['url_builder']['name'] = 'front_content';

// konfiguration des zu verwendenden urlbuilders
// typ is eine assoziative oder leere liste
$cfg['url_builder']['config'] = array();
Wenn du z. B. den UrlBuilder "custom_path" verwenden möchtest, ist die Konfiguration folgendermaßen anzupassen:

Code: Alles auswählen

$cfg['url_builder']['name']   = 'custom_path';
$cfg['url_builder']['config'] = array('prefix' => 'rocknroll', 'suffix' => '.4fb', 'separator' => ',');
Dann werden Urls nach dem Muster "http://hostname/cms/{kategoriename}/roc ... rieid}.4fb" oder ähnlich generiert.

Damit solche Urls korrekt erkannt werden und wieder zur richtigen Seite mit den Parametern idlang, idcat, idat usw. umschrieben werden, braucht man eine .htaccess Datei. Du kannst die Regeln zum Umschreiben in der .htaccess definieren oder auch in einer PHP-Funktion, die am Anfang der Datei cms/front_content.php eingebunden wird.

Hier ein Beispiel einer .htaccess mit ein paar gängigen Regeln, die zum UrlBuilder "custom_path" passen. Die .htaccess Datei ist in das Installationsverzeichnis von Contenido abzulegen und sollte folgenden Inhalt haben:

Code: Alles auswählen

<IfModule mod_rewrite.c>

	# Enable rewrite engine
	RewriteEngine on

	# Specify a base URL-path for the rules
	RewriteBase /cms

	# Don't rewrite requests to existing files, folders, symlinks
	RewriteCond %{REQUEST_FILENAME} -s [OR] 
	RewriteCond %{REQUEST_FILENAME} -l [OR] 
	RewriteCond %{REQUEST_FILENAME} -d      
	RewriteRule ^.*$ - [NC,L]

	# Some 'custom_path' related rules
	RewriteRule rocknroll,a,([0-9]*)\.4fb.*$ front_content.php?idcat=$1 [NC,QSA,L]
	RewriteRule rocknroll,b,([0-9]*),([0-9]*),([0-9]*)\.4fb.*$ front_content.php?idlang=$1&idcat=$2&idart=$3 [NC,QSA,L]
	RewriteRule rocknroll,search,([0-9]*),([0-9]*),([0-9]*)\.4fb.*$ front_content.php?idlang=$1&idcat=$2&idart=$3 [NC,QSA,L]
	RewriteRule rocknroll,changelang,([0-9]*),_c_p_,([0-9]*)\.4fb.*$ front_content.php?changelang=$1&whichparamisthis=$2 [NC,QSA,L]

	# Pass other requests to front_content.php
	RewriteRule ^.*$ front_content.php [QSA,NC,L]

</IfModule>
Sollte das auf Anhieb nicht funktionieren, liegt das sehr wahrscheinlich an der Konfiguration des Webservers und/oder des Virtual-Hosts. Hier kann ich leider nicht weiter darauf eingehen, dazu müsste man sehr weit ausholen und das Thema ist auch sehr allgemein, hat also mit Contenido nichts zu tun. Es gibt aber genug Infos im Netz zur Konfiguration/Einrichtung von mod_rewrite, .htaccess und Webserver.

Wenn es dennoch klappt, wirst du einige Links finden, die dennoch nicht umschrieben werden. Damit alle Links umschrieben werden können, musst du darauf achten, das alle Links in Modulen/Plugins von der Klasse Contenido_Url erstellt werden werden, z. B.:

Code: Alles auswählen

$aParams = array('idcat' => $idcat, 'lang' => $lang);
Contenido_Url::getInstance()->build($aParams);
Es bleiben noch Links, die per wysiwyg-Editor gesetzt werden. Diese kannst du in der Chain 'Contenido.Frontend.HTMLCodeOutput' ermitteln und umschreiben. Dabei wird der Chain-Funktion, die HTML-Ausgabe der Seite übergeben und in der Funktion hast du die Möglichkeit, z. B. mit regulären Ausdrücken nach Links mit front_content.php... zu suchen und diese gegen die Clean-URLs zu ersetzen, bevor die HTML-Ausgabe endgültig an den Client geht.

Du kannst dir auch das AMR-Plugin unter http://forum.contenido.org/viewtopic.php?f=66&t=21578 ansehen, das dir vieles davon abnimmt, und ein paar zusätzliche Features hat. Das Plugin ist zwar nicht ganz fehlerfrei und wird sicherlich nicht den Ansprüchen von Jedem gerecht, ist aber in der Regel einfach zu handhaben und hilfreich.

Gruß
xmurrix