301 Redirect mit Oracle Apex?

Warum der 301-Redirect?

Wird eine Web-Anwendung im Internet veröffentlicht tauchen ganz neue Aspekte auf, die im Intranet keine Rolle spielen. Ein zentraler Aspekt ist der Umgang der Anwendung mit Google & Co.

Ist zum Beispiel eine veraltete URL nach einer Zeit nicht mehr in der Anwendung verfügbar, muss man davon ausgehen, dass Suchmaschinen die Seite trotzdem noch indiziert haben. Dies muss noch nicht einmal eine komplette Page sein, sondern kann auch nur ein Produkt sein, das nicht mehr im Stock des Onlineshops vorhanden ist. Dabei hilft es auch nicht die sitemap.xml zu aktualisieren. Das Sperren der URL über die robots.txt ist zwar im Prinzip möglich, allerdings auch sehr schwerfällig.

In solchen Fällen rät Google & Co dem Webmaster, einen 301-Redirect für die URL (moved permenantly) einzurichten. Dies geschieht zum Beispiel über eine mod_rewrite-Regel im Apache. Im Falle einer Oracle Apex-Anwendung ist dies allerdings auch zu unflexibel. Besser ist ein 301 Redirect aus der Anwendung heraus.

Kein 301 Redirect mit owa_util

Im Prinzip sollte ein 301 Redirect über owa_util möglich sein, dies scheitert aber an der aktuellen Implementierung:

Verschiedene Quellen in Web schlagen folgendes Coding vor

owa_util.status_line(301, null,FALSE);
owa_util.redirect_url('http://apextipps.wordpress.com', TRUE);

Erzeugt man einen entsprechenden Page-Prozess als „before header“-Prozess, zeigt sich beim Aufruf der Seite , dass trotzdem ein 302 Redirect (Moved Temporarily) zum Client gesendet wird. Ein schönes Tool, um das Redirect-Verhalten zu kontrollieren ist z.B. das Firfox-Plugin Tampa Data

Dieses Verhalten zeigt sich sowohl in der Kombination Oracle XE + Apex 3.2.1 als auch mit Oracle 11g + Apex 4

Die Alternative: 410er Get mit Meta-Redirect

Als Alternative zum 301-Redirect gibt es folgenden Workaround, der in beiden Oracle/Apex – Kombinationen funktioniert hat und den gleichen Effekt für Google & Co hat:

  1. Die URL, die aus dem Google-Index gelöscht werden soll, schickt den Status-Code 410 (Gone) zurück. Eine 410er-Seite muss zum Glück keinen bestimmten Aufbau haben. Das erleichtert die Programmierung in Apex
  2. Um trotzdem einen Redirect zum Client zu senden, falls die URL noch nicht aus dem Index gelöscht wurde wird ein Meta-Redirect verwendet.

Folgendes Coding kann für den Page-Prozess (wieder Before-Header) dafür verwendet werden:

-- 410 instead of 200 indicates that the page should be dropped
-- from any crawler index:
owa_util.status_line(410, 'Gone',FALSE);
-- send a meta-redirect in case a client still ends up on the page:
htp.p('Refresh: 0; url=http://apextipps.wordpress.com');
owa_util.http_header_close;


Kleiner Schönheitsfehler: Der Meta-Redirect hat immer eine Latenzzeit von 1 Sek. Der Client bekommt also kurz die 410er Seite angezeigt.

Schlagwörter:

Schreibe einen Kommentar