Signatur
Beschreibung
output_add_rewrite_var() registriert ein Name-Wert-Paar im internen URL-Rewriter von PHP. Sobald der Output-Buffering-Handler ob_start('ob_gzhandler') oder der Session-URL-Rewriter aktiv ist, werden alle relativen URLs sowie versteckte Formularfelder im generierten HTML automatisch um die registrierten Parameter ergänzt.
Die Funktion ist vor allem nützlich, wenn Sitzungs-IDs oder andere persistente Parameter ohne Cookies übertragen werden sollen – z. B. in Umgebungen, in denen Cookies deaktiviert sind. Sie arbeitet eng mit der PHP-Konfigurationsdirektive url_rewriter.tags zusammen, die bestimmt, welche HTML-Tags und Attribute umgeschrieben werden.
Intern nutzt output_add_rewrite_var() denselben Mechanismus wie der transparente Session-URL-Rewriter (session.use_trans_sid). Die registrierten Variablen werden bei der Ausgabe als Query-Parameter an URLs angehängt und als <input type="hidden">-Felder in Formulare eingefügt.
Mit output_reset_rewrite_vars() können alle zuvor registrierten Variablen wieder entfernt werden. Es empfiehlt sich, nur sicherheitlich unkritische Daten über diesen Mechanismus zu übertragen, da die Parameter in der URL sichtbar sind.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $name Pflicht | string | Der Name des URL-Parameters, der an alle umzuschreibenden URLs und Formulare angehängt wird. | |
| $value Pflicht | string | Der Wert des URL-Parameters. Wird automatisch URL-kodiert, wenn er in Query-Strings eingefügt wird. |
Rückgabewert
true zurück, wenn die Variable erfolgreich registriert wurde, andernfalls false.Beispiele
Session-ID in URLs einbetten ohne Cookies
<?php
// Output-Buffering mit URL-Rewriting aktivieren
ob_start();
// Session starten und ID zum Rewriter hinzufügen
session_start();
output_add_rewrite_var('PHPSESSID', session_id());
// Jetzt werden alle Links automatisch umgeschrieben:
?>
<html>
<body>
<a href="seite.php">Zur nächsten Seite</a>
<form action="verarbeitung.php" method="post">
<input type="text" name="eingabe" />
<input type="submit" value="Absenden" />
</form>
</body>
</html>
<?php
// Ausgabe wird z. B. so transformiert:
// <a href="seite.php?PHPSESSID=abc123">Zur nächsten Seite</a>
// <form ...><input type="hidden" name="PHPSESSID" value="abc123" /> ...
ob_end_flush();
Mehrere Parameter registrieren und zurücksetzen
<?php
ob_start();
// Mehrere Rewrite-Variablen registrieren
output_add_rewrite_var('lang', 'de');
output_add_rewrite_var('theme', 'dark');
echo '<a href="index.php">Startseite</a>';
// Ausgabe enthält: <a href="index.php?lang=de&theme=dark">Startseite</a>
ob_end_flush();
// Alle registrierten Variablen wieder entfernen
output_reset_rewrite_vars();
ob_start();
echo '<a href="index.php">Startseite</a>';
// Ausgabe enthält nun keine zusätzlichen Parameter mehr
ob_end_flush();
// Wichtig · Fallstricke
Sicherheitshinweis: URL-Parameter sind für alle Benutzer sichtbar – in der Adressleiste des Browsers, in Server-Logs und im Browser-Verlauf. Sensitive Daten (z. B. Authentifizierungstoken) sollten niemals über diesen Mechanismus übertragen werden.
Damit der URL-Rewriter tatsächlich greift, muss Output-Buffering aktiv sein (entweder über ob_start() im Code oder über output_buffering in der php.ini). Ohne aktiven Ausgabepuffer hat die Funktion keine Wirkung auf die erzeugte Ausgabe.
Die betroffenen HTML-Tags werden durch die INI-Direktive url_rewriter.tags (PHP < 7.1) bzw. session.trans_sid_tags (PHP ≥ 7.1) gesteuert. Standardmäßig werden <a href>, <area href>, <frame src> und <form> umgeschrieben.