Hallo!
Ich möchte gerne eine sehr alte Site auf Contenido übernehmen. Um die Links auf die alten URLS zu retten möchte ich Umschreibungen der Contenido-URLS auf den alten Dateinamen seiten-name.html machen. Ich würde hierzu den Alias des Artikels verwenden:
Alias = alter-seitenname.html
URL im Browser = Domain.de/alter-seitenname.html
Optimal wäre jetzt, wenn beim Mod-Rewrite nur noch dieser Alias in der URL auftauchen würde und der Alias zur Verlinkung beibehalten werden könnten. Wenn ich die Doku von AMR richtig verstanden habe, stehen hier aber nur Pfade über die Kategorien zur Verfügung (im Stil: Kategorie/Kategorie/Alias.Endung). Ich möchte auch vermeiden alle alten Seiten im Routing aufzunehmen.
Gibt es hierfür eine einfache Lösung?
Gruß
Altermac
Eintrag im Alias für MOD Rewrite verwenden?
-
- Beiträge: 3215
- Registriert: Do 21. Okt 2004, 11:08
- Wohnort: Augsburg
- Hat sich bedankt: 4 Mal
- Danksagung erhalten: 17 Mal
- Kontaktdaten:
Re: Eintrag im Alias für MOD Rewrite verwenden?
Hallo Altermac,
die einfachste Lösung wäre das Umleiten von alten Seiten auf die neuen Seiten, entweder per htaccess oder per internes routing des AMR-Plugins.
Du schreibst, das du das Routing ungern verwenden möchtest, dann hast du noch folgende Alternativen:
xmurrix
die einfachste Lösung wäre das Umleiten von alten Seiten auf die neuen Seiten, entweder per htaccess oder per internes routing des AMR-Plugins.
Du schreibst, das du das Routing ungern verwenden möchtest, dann hast du noch folgende Alternativen:
- Aufbauen der Kategoriestruktur, so das man daraus die alten URLs generieren kann
Beispiel:
Alte Seite: ueberuns-team.html
Neue Seite in Contenido:
Kategorie: Überuns
Kategoriealias: ueberuns
Trenner zwischen Kategorie u. Artikel "-"
Artikel: Team
Artikelalias: team - Erstellen eines eigenen URL-Builders, der die URLs so generiert, wie es erwünscht ist. Ist besser, als das AMR-Plugin anzupassen, hast sonst später Probleme bei updates
xmurrix
CONTENIDO Downloads: CONTENIDO 4.10.1
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.
Re: Eintrag im Alias für MOD Rewrite verwenden?
Ich tendiere in Richtung eigener URL-Builder. Auf diese Weise kann ich im Artikel oder in der Kategorie einen "Dateinamen" hinterlegen und muß keine 301er pflegen. Die alten URLs waren schon recht gut "SEO"-optimiert.
Gibt es eine gute Dokumentation zum Thema URL-Builder?
Ich hab bislang nur die Kommentare im Sample gefunden. Für einen eigenen Versuch ist mir das noch zu wenig.
Gibt es eine gute Dokumentation zum Thema URL-Builder?
Ich hab bislang nur die Kommentare im Sample gefunden. Für einen eigenen Versuch ist mir das noch zu wenig.
Re: Eintrag im Alias für MOD Rewrite verwenden?
Geht es dir darum, dass du gar keine Moved-Permanently-Header pflegen möchtest oder darum, dass du dauerhaft die alten URLs beibehalten möchtest? Weil wenn du weitere Artikel hinzufügen wirst, musst du dann die entsprechende Information immer weiterpflegen müssen. Das dürfte auf Dauer erheblich umständlicher sein, zumal du Konflikte vermeiden musst.
Falls es nur eine Frage des Pflegeaufwands ist, dann hätte ich dir evt. eine Lösung mit Rewrite History. Ansonsten müsstest du wohl eine eigene Umschreibung schreiben.
Falls es nur eine Frage des Pflegeaufwands ist, dann hätte ich dir evt. eine Lösung mit Rewrite History. Ansonsten müsstest du wohl eine eigene Umschreibung schreiben.
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)
-
- Beiträge: 3215
- Registriert: Do 21. Okt 2004, 11:08
- Wohnort: Augsburg
- Hat sich bedankt: 4 Mal
- Danksagung erhalten: 17 Mal
- Kontaktdaten:
Re: Eintrag im Alias für MOD Rewrite verwenden?
Eine vollständige Dokumentation dazu gibt es nicht, gehe aber folgendermaßen vor:Altermac hat geschrieben:...Gibt es eine gute Dokumentation zum Thema URL-Builder? ...
- Als groben Einstieg zum Thema den Beitrag http://forum.contenido.org/viewtopic.php?f=64&t=23280 durchlesen, falls du es schon nicht gemacht hast
- Implementiere einen eigenen UrlBuilder auf Basis von contenido/classes/UrlBuilder/Contenido_UrlBuilder_Custom.class.php.
Erstelle im Verzeichnis contenido/classes/UrlBuilder/ eine Kopie von Contenido_UrlBuilder_Custom.class.php, z. B. Contenido_UrlBuilder_MyCustom.class.php.
Öffne die Datei Contenido_UrlBuilder_MyCustom.class.php und ändere den Klassenamen Contenido_UrlBuilder_Custom in Contenido_UrlBuilder_MyCustom.
Falls nicht vorhanden, erstelle eine Datei config.local.php im Ordner contenido/includes/ und schreibe folgendes rein:Die Datei contenido/includes/config.local.php wird vom Contenido startup-Prozess eingebunden, die darin definierte UrlBuilder-Konfiguration wird somit übernommenCode: Alles auswählen
<?php global $cfg; $cfg['url_builder']['name'] = 'MyCustom'; $cfg['url_builder']['config'] = array('suffix' => '.html'); cInclude('classes', 'Url/Contenido_Url.class.php'); cInclude('classes', 'UrlBuilder/Contenido_UrlBuilderConfig.class.php'); Contenido_UrlBuilderConfig::setConfig($cfg['url_builder']);
Passe die Funktion buildUrl() in der Datei Contenido_UrlBuilder_MyCustom.class.php deinen Bedürfnissen an, z. B.:Die Funktionen getArticleAliasByIdArt() und getArticleAliasByIdCatArt() müsstst du noch implementieren. Diese sollen anhand der idart oder idcatart den Alias der Seite liefern.Code: Alles auswählen
public function buildUrl(array $aParams, $bUseAbsolutePath = false, array $aConfig = array()) { if (sizeof($aParams) == 0) { throw new InvalidArgumentException('$aParams must have at least one entry!'); } $this->sUrl = $bUseAbsolutePath === true ? $this->sHttpBasePath : ''; if (isset($aParams['idart']) && (int) $aParams['idart'] > 0) { // just a sample, you have to implement function getArticleAliasByIdArt() // $this->sUrl .= getArticleAliasByIdArt($aParams['idart']); } elseif (isset($aParams['idcatart']) && (int) $aParams['idcatart'] > 0) { // just a sample, you have to implement function getArticleAliasByIdCatArt() // $this->sUrl .= getArticleAliasByIdCatArt($aParams['idcatart']); } $this->sUrl .= '.' . $this->aConfig['suffix']; }
- Der Rest wird von Contenido übernommen. Du musst nur dafür sorgen, dass sämtliche URLs in allen Modulen/Plugins den Contenido UrlBuilder verwenden, z. B.:
Der Parameter für Sprache ($lang) sollte immer übergeben werden. Auch wenn deine UrlBuilder Klasse dies nicht verwendet, andere UrlBuilder erwarten diesen Parameter. Sonst kann das bei einem Wechsel zu einem anderen UrlBuilder zu Problemen führen.
Code: Alles auswählen
// mit idcat $aParams = array ('idcat' => $idcat, 'lang' => $lang); $url = Contenido_Url::getInstance()->build($aParams); // oder mit idart $aParams = array ('idart' => $idcat, 'lang' => $lang); $url = Contenido_Url::getInstance()->build($aParams);
Contenido_Url verwendet dann deinen eigenen UrlBuilder, d. h. der Aufruf von Contenido_Url::getInstance()->build($aParams); wird an die buildUrl() Funktion deiner Klasse Contenido_UrlBuilder_MyCustom weitergereicht. - Dann brauchst du noch ein paar Regeln in der .htaccess damit Requests auf die front_content.php umschrieben werden. Die folgenden Regeln sind nur Beispiele, können in deinem Fall abweichend sein.
Code: Alles auswählen
# Enable rewrite engine RewriteEngine on # Specify a base URL-path for the rules RewriteBase /cms # Rewrite request to root to front_content.php RewriteRule ^$ front_content.php [QSA,L] # Exclude following request from rewriting RewriteCond %{REQUEST_FILENAME} -s [OR] RewriteCond %{REQUEST_FILENAME} -l [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^.*$ - [NC,L] # Pass other requests to front_content.php RewriteRule ^.*$ front_content.php [QSA,NC,L]
- Falls nicht vorhanden, erstelle eine Datei config.local.php im Mandantenverzeichnis cms/ und schreibe folgendes rein:
Code: Alles auswählen
<?php global $cfg, $idart; $uri = (string) $_SERVER['REQUEST_URI']; $pathinfo = pathinfo($uri); $suffix = $cfg['url_builder']['config']['suffix']; if (isset($pathinfo['extension']) && $pathinfo['extension'] == $suffix) { // set idart by incomming request uri // just a sample, you have to implement function getIdArtByRequestUri() $idart = (int) getIdArtByRequestUri($uri); }
Die Funktion getIdArtByRequestUri() müsstest du noch implementieren. Die soll anhand der Request-URI (z. B. 'seitenname.html') die Artielid zurückliefern.
Die Beispiele sind sehr einfach gehalten, keine richtige Fehlerbehandlung, keine Verwendung von Contenido Chains und sonstige Spielereien wie OOP, usw. - Hoffentlich hilft dir das bei deinem Vohaben weiter ...
Gruß
xmurrix
CONTENIDO Downloads: CONTENIDO 4.10.1
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.