PHPackages                             yakamara/redaxo\_yrewrite - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. yakamara/redaxo\_yrewrite

ActiveLibrary

yakamara/redaxo\_yrewrite
=========================

2.12.0(10mo ago)562139[24 issues](https://github.com/yakamara/yrewrite/issues)[10 PRs](https://github.com/yakamara/yrewrite/pulls)PHPPHP &gt;=8.1CI passing

Since Dec 5Pushed 3mo ago11 watchersCompare

[ Source](https://github.com/yakamara/yrewrite)[ Packagist](https://packagist.org/packages/yakamara/redaxo_yrewrite)[ RSS](/packages/yakamara-redaxo-yrewrite/feed)WikiDiscussions main Synced 1mo ago

READMEChangelog (10)Dependencies (6)Versions (18)Used By (0)

YRewrite
========

[](#yrewrite)

Übersicht
---------

[](#übersicht)

Das AddOn YRewrite für REDAXO erweitert das CMS um "sprechende" URLs und unterstützt den Betrieb mehrerer Domains. REDAXO ohne Rewriter-AddOn erstellt Urls nach dem Schema `index.php?article_id=13&clang=1`zur Vefügung. YRewrite bietet lesbare URLs wie z.B. `/de/news/archiv/` in verschiedenen Schemata.

Mehrere Domains können dann sinnvoll sein, wenn

- mehrere Websites eines Kunden in einer Installation verwaltet werden,
- verschiedene Sprachen (`clang`) einer Website unter unterschiedlichen Domains oder Subdomains erreichbar sind,
- oder beides.

> Tipp: Wir empfehlen im ersten Fall, für jede einzelne Domain in der Struktur auf der obersten Ebene eine Kategorie anzulegen.

Features
--------

[](#features)

- Mehrere Domains in einer Webseite verwaltbar
- Sprachabhängigkeiten von Domains zuweisbar
- Domain- und sprachabhängige ROBOTS.txt-Anweisungen und XML-Sitemaps
- Individuelle URL pro Artikel möglich
- Seitentitel-Schema definierbar / pro Domain/Sprache
- Alias Domains die auf die Hauptdomain verweisen
- Allgemeine Weiterleitungen. URLs zu internen Artikeln, Dateien, externen Artikeln, sogar Protokoll-Tausch in bspw. `tel:`, `mailto:` u.a.
- Canonical Urls

Installation
------------

[](#installation)

Voraussetzung für die aktuelle Version von YRewrite: REDAXO &gt;= 5.5

- Über das REDAXO-Backend installieren und aktivieren
- Setup ausführen

Erste Schritte
==============

[](#erste-schritte)

Setup
-----

[](#setup)

Unter dem Reiter `Setup` sind die `sitemap.xml` und `robots.txt` je eingerichteter Domain einsehbar. Außerdem lässt sich ein Setup durchführen, bei der die Apache-Konfiguration für YRewrite über eine `.htaccess`-Datei erstellt wird.

### Apache-Konfiguration für YRewrite

[](#apache-konfiguration-für-yrewrite)

Das Setup ausführen, um eine `.htaccess`-Datei im Hauptverzeichnis zu erstellen, die für die Verwendung von YRewrite benötigt wird. Anschließend werden alle Frontend-URLs in suchmaschinenfreundliche URLs umgeschrieben ("Rewriteing").

> **Hinweis** Sollten nach Abeschluss des Setups die Frontend-URLs nicht funktionieren, bitte prüfen, ob es sich um einen Apache- oder NGINX-Server handelt (siehe unten). Außerdem prüfen, ob das Webhosting-Paket eigene `.htaccess`-Regeln erlaubt.

> **Hinweis:** Das Addon leitet alle Anfragen von `/media/` über das Media-Manager-AddOn. Stelle daher sicher, dass es weder eine Struktur-Kategorie "Media" gibt, noch, dass sich keine deiner Dateien fürs Frontend, bspw. CSS- oder JS-Dateien, darin befinden. Gute Orte hierfür sind die Ordner `/assets/` oder die Verwendung des Theme-AddOns. Sollte es notwendig sein, eine Kategorie namens "Media" zu verwenden, dann müssen [die entsprechenden Zeilen in der .htaccess-Datei](https://github.com/yakamara/redaxo_yrewrite/blob/b519622a3be135f1380e35bf85783cc33e71664f/setup/.htaccess#L96-L97) auskommentiert oder umbenannt werden und diese fortan genutzt werden, wenn Medien aus dem Medien Manager verwendet werden. Dies hat weitere Auswirkungen, z.B. auf geschützte Dateien mit YCom - das Auskommentieren und Umbenennen sollte daher nur von erfahrenen REDAXO-Entwicklern vorgenommen werden.

### NGINX-Konfiguration für YRewrite

[](#nginx-konfiguration-für-yrewrite)

Eine vollständige nginx config für YRewrite.

> Hinweis für PLESK-Websites: Die Direktiven können unter ***Einstellungen für Apache &amp; nginx*** der gewünschten Domain im Abschnitt ***Zusätzliche nginx-Anweisungen*** hinterlegt werden.

```
charset utf-8;

location / {
  try_files $uri $uri/ /index.php$is_args$args;
}

rewrite ^/sitemap\.xml$                           /index.php?rex_yrewrite_func=sitemap last;
rewrite ^/robots\.txt$                            /index.php?rex_yrewrite_func=robots last;
rewrite ^/media[0-9]*/imagetypes/([^/]*)/([^/]*)  /index.php?rex_media_type=$1&rex_media_file=$2&$args;
rewrite ^/media/([^/]*)/([^/]*)                   /index.php?rex_media_type=$1&rex_media_file=$2&$args;
rewrite ^/media/(.*)                              /index.php?rex_media_type=yrewrite_default&rex_media_file=$1&$query_string;
rewrite ^/images/([^/]*)/([^/]*)                  /index.php?rex_media_type=$1&rex_media_file=$2&$args;
rewrite ^/imagetypes/([^/]*)/([^/]*)              /index.php?rex_media_type=$1&rex_media_file=$2;

// !!! WICHTIG !!! Falls Let's Encrypt fehlschlägt, diese Zeile auskommentieren (sollte jedoch funktionieren)
location ~ /\. { deny  all; }

// Zugriff auf diese Verzeichnisse verbieten
location ^~ /redaxo/src { deny  all; }
location ^~ /redaxo/data { deny  all; }
location ^~ /redaxo/cache { deny  all; }
location ^~ /redaxo/bin { deny  all; }

// In einigen Fällen könnte folgende Anweisung zusätlich sinnvoll sein.

location ~ /\.(ttf|eot|woff|woff2)$ {
  add_header Access-Control-Allow-Origin *;
  expires 604800s;
}
```

Domain hinzufügen
-----------------

[](#domain-hinzufügen)

1. In "YRewrite" unter "Domains" Auf das +-Zeichen klicken.
2. Domain eintragen, bspw. `https://www.meine-domain.de/`.
3. Mountpoint auswählen (optional). Das ist der Startartikel einer Kategorie, in der sich YRewrite einklinken soll. Alle Artikel unterhalb des Mount-Artikels sind dann über die Domain aufrufbar. Wird kein Artikel ausgewählt, sind alle Ebenen dieser Domain zugeordnet (Standard).
4. Startseiten-Artikel auswählen. Das kann der Mount-Artikel sein oder eine separate Artikelseite. Diese wird als Startseite der Domain aufgerufen.
5. Fehlerseiten-Artikel auswählen. Das ist der Artikel, der mit einem 404-Fehlercode ausgegeben wird, z.B., wenn eine Seite nicht gefunden werden kann oder ein Tippfehler in der Adresse vorliegt.
6. Spracheinstellungen: Hier können Sprachen ausgewählt werden, die mit der Domain verknüpft werden. So lassen sich bspw. unterschiedliche Domains pro Sprache umsetzen.
7. Titelschema eintragen, bspw. `%T - Meine Domain`. Dieses Titelschema kann dann im Website-Template ausgegeben werden.
8. robots.txt-Einstellungen hinzufügen. Siehe Tipp unten.
9. Domain hinzufügen.

Diese Vorgehensweise für alle gewünschten Domains wiederholen.

> **Tipp:** Um die Installation während der Entwicklung zuverlässig gegen ein Crawling von Bots und Suchmaschinen zu schützen, genügt die `robots.txt` nicht. Dazu gibt es das `maintanance`-Addon von

> **Tipp:** Die Domain auch in der Google Search Console hinterlegen und die `sitemap.xml` dort hinzufügen, um das Crawling zu beschleunigen. Die Domain sollte in allen vier Variationen hinterlegt werden, also mit/ohne `https` und mit/ohne `www.`. Die `sitemap.xml` jedoch nur in der Hauptdomain, am besten mit `https://` und `www.`

> **Hinweis:** Domains mit Umlauten bitte derzeit decodiert eintragen. Umwandlung bspw. mit

> **Hinweis:** Informationen zu Best Practice zu Domains und mehrsprachigen Websites auch unter [Multiregionale und mehrsprachige Websites verwalten](https://developers.google.com/search/docs/advanced/crawling/managing-multi-regional-sites?hl=de) aus der Google Search Central Dokumentation.

Alias-Domain hinzufügen
-----------------------

[](#alias-domain-hinzufügen)

Alias-Domains werden nur dann benötigt, wenn mehrere Domains auf den selben Ordner im Server zeigen, aber keine separaten Websites aufrufen. z.B. `www.meinedomain.de` und `www.meine-domain.de`.

Alias-Domains müssen nicht eingetragen werden, wenn die Domain nicht auf das Serververzeichnis zeigt. Einige Hoster bieten bspw. von sich aus die Möglichkeit, per Redirect von `www.meinedomain.de` auf `www.meine-domain.de` weiterzuleiten. Dann wird die Einstellung nicht benötigt.

1. In "YRewrite" unter "Domains" Auf das +-Zeichen klicken
2. Alias-Domain eintragen, bspw. `https://www.meine-domain.de/`
3. Ziel-Domain aus YRewrite auswählen
4. Alias-Domain hinzufügen

Weiterleitungen
---------------

[](#weiterleitungen)

Unter Weiterleitungen können URLs definiert werden, die dann auf einen bestimmten Artikel oder eine andere Adresse umgeleitet werden.

> **Hinweis:** Mit dieser Einstellung können nicht bereits vorhandene Artikel / URLs umgeleitet werden, sondern nur URLs, die in der REDAXO-Installation nicht vorhanden sind. Das ist bspw. bei einem Relaunch der Fall, wenn alte URLs auf eine neue Zielseite umgeleitet werden sollen.

> **Tipp**: Damit lässt sich auch ein Artikel oder eine Kategorie zu einem gänzlich anderen URI-Protokoll ändern, bspw. `tel:`, `mailto:` u.a. Diese werden auch an anderer Stelle, bspw. von der `rex_navigation::factory()`, berücksichtigt.

Weitere Schritte
----------------

[](#weitere-schritte)

Die `sitemap.xml` kann pro Domain bspw. in der Google Search Console eingetragen werden, um die korrekte Indexierung der Domain(s) und deren Seiten zu überprüfen.

Klassen-Referenz
================

[](#klassen-referenz)

YRewrite-Objekt
---------------

[](#yrewrite-objekt)

Siehe auch: [https://github.com/yakamara/redaxo\_yrewrite/blob/main/lib/yrewrite/yrewrite.php](https://github.com/yakamara/redaxo_yrewrite/blob/main/lib/yrewrite/yrewrite.php)

```
    $yrewrite = new rex_yrewrite;
    // dump($yrewrite); // optional alle Eigenschaften und Methoden anzeigen

```

**Methoden**

```

```

YRewrite-Domain-Objekt
----------------------

[](#yrewrite-domain-objekt)

Siehe auch: [https://github.com/yakamara/redaxo\_yrewrite/blob/main/lib/yrewrite/domain.php](https://github.com/yakamara/redaxo_yrewrite/blob/main/lib/yrewrite/domain.php)

```
$domain = rex_yrewrite::getCurrentDomain();
dump($domain); // optional alle Eigenschaften und Methoden anzeigen

```

**Methoden**

```
init()
getScheme()
setScheme(rex_yrewrite_scheme $scheme)
addDomain(rex_yrewrite_domain $domain)
addAliasDomain($from_domain, $to_domain_id, $clang_start = 0)
getDomains()
getDomainByName($name)
getDomainById($id)
getDefaultDomain()
getCurrentDomain()
getFullUrlByArticleId($id, $clang = null, array $parameters = [], $separator = \'&amp;\')
getDomainByArticleId($aid, $clang = null)
getArticleIdByUrl($domain, $url)
isDomainStartArticle($aid, $clang = null)
isDomainMountpoint($aid, $clang = null)
getPathsByDomain($domain)
prepare()
rewrite($params = [], $yparams = [], $fullpath = false)
generatePathFile($params)
checkUrl($url)
generateConfig()
readConfig()
readPathFile()
copyHtaccess()
isHttps()
deleteCache()
getFullPath($link = \'\')
getHost()

```

YRewrite-SEO-Objekt
-------------------

[](#yrewrite-seo-objekt)

Siehe auch: [https://github.com/yakamara/redaxo\_yrewrite/blob/main/lib/yrewrite/seo.php](https://github.com/yakamara/redaxo_yrewrite/blob/main/lib/yrewrite/seo.php)

```
$seo = new rex_yrewrite_seo();
dump($seo); // optional alle Eigenschaften und Methoden anzeigen

```

**Methoden**

```

```

Beispiele
=========

[](#beispiele)

ID der aktuellen Domain in YRewrite
-----------------------------------

[](#id-der-aktuellen-domain-in-yrewrite)

```
rex_yrewrite::getCurrentDomain()->getId();

```

Beispiel-Rückgabewert: `1`

Mount-ID der Domain
-------------------

[](#mount-id-der-domain)

```
rex_yrewrite::getCurrentDomain()->getMountId();

```

Beispiel-Rückgabewert: `5`

Startartikel-ID der Domain
--------------------------

[](#startartikel-id-der-domain)

```
rex_yrewrite::getCurrentDomain()->getStartId();

```

Beispiel-Rückgabewert: `42`

Fehler-Artikel-ID der Domain
----------------------------

[](#fehler-artikel-id-der-domain)

```
rex_yrewrite::getCurrentDomain()->getNotfoundId();

```

Beispiel-Rückgabewert: `43`

Name der aktuellen Domain
-------------------------

[](#name-der-aktuellen-domain)

```
rex_yrewrite::getCurrentDomain()->getName();

```

Beispiel-Rückgabewert: `meine-domain.de`

vollständige URL eines Artikels
-------------------------------

[](#vollständige-url-eines-artikels)

```
rex_yrewrite::getFullUrlByArticleId(42);

```

Beispiel-Rückgabewert: `https://www.meine-domain.de/meine-kategorie/mein-artikel.html`

Zu welcher Domain gehört der aktuelle Artikel?
----------------------------------------------

[](#zu-welcher-domain-gehört-der-aktuelle-artikel)

```
rex_yrewrite::getDomainByArticleId(REX_ARTICLE_ID)->getName();

```

Beispiel-Rückgabewert: `meine-domain.de`

Meta-Tags auslesen (`description`, `title`, `image` usw.)
---------------------------------------------------------

[](#meta-tags-auslesen-description-title-image-usw)

Diesen Codeabschnitt in den ``-Bereich des Templates kopieren:

```
$seo = new rex_yrewrite_seo();
echo $seo->getTags();
```

Dies erzeugt folgende Ausgabe:

```

';

```

Meta-Tags erweitern / ändern
----------------------------

[](#meta-tags-erweitern--ändern)

```
rex_extension::register('YREWRITE_SEO_TAGS', function(rex_extension_point $ep) {
    $tags = $ep->getSubject();

    // title-Tag ändern
    $title = rex_escape('Ein geänderter Titel');
    $tags['title'] = ''.$title.'';
    $tags['og:title'] = '';
    $tags['twitter:title'] = '';

    // favicon-Tags hinzufügen
    $tags['favicon'] = '

            ';
    $ep->setSubject($tags);
});
```

Navigation Factory in Abhängigkeit der gewählten Domain
-------------------------------------------------------

[](#navigation-factory-in-abhängigkeit-der-gewählten-domain)

Weitere Informaionen zur Navigation Factory des REDAXO-Cores in der API-Dokumentation unter  und bei den Tricks von FriendsOfREDAXO:

```
$nav = rex_navigation::factory();
echo $nav->get(rex_yrewrite::getCurrentDomain()->getMountId(), 1, TRUE, TRUE);

```

Übersicht aller Domains ausgeben
--------------------------------

[](#übersicht-aller-domains-ausgeben)

```
$domains = array_filter(rex_sql::factory()->setDebug(0)->query(\'SELECT * FROM rex_yrewrite_domain\')
foreach($domains as $domain) {
    dump($domain);
}

```

URL-Schemes für YRewrite
========================

[](#url-schemes-für-yrewrite)

Übersicht
---------

[](#übersicht-1)

YRewrite kann durch Schemes erweitert werden.

**Installation**

- Als Datei im `lib`-Ordner des **project-AddOns** ablegen.
- Dateiname: `eigene_rewrite_class.php`
- In die `boot.php` des project-AddOns einsetzen:

```
