Ich versuche mehrere Versionen der gleichen Webanwendung zu bearbeiten, ähnlich wie Google bei einigen Produkten, bei denen Sie den Link "Neue Version ausprobieren" erhalten.
Ziel ist es, sowohl eine "stable" - als auch eine "beta" -Version der Webapp zu haben und die Benutzer die neuen Funktionen ausprobieren zu lassen, ohne sie (und ihre Bugs) zu erzwingen.
Nun wäre es sehr einfach, jede Version in einen eigenen Unterordner zu stellen, wie zB www.mywebapp.com/v1 und www.mywebapp.com/v2.
Ich möchte jedoch, dass dies für den Benutzer transparent ist und die URL der Webanwendung unverändert bleibt (z. B. www.mywebapp.com /).
Welche Version geladen werden muss, wird nach der Benutzeranmeldung serverseitig ermittelt (zB: aktive Version für den angegebenen Benutzer wird in der Datenbank gespeichert) und kann später geändert werden, wenn der Benutzer auf "die neue Version ausprobieren" klickt / "Zurück zur alten Version" -Links.
Auf der Serverseite muss ich mit MySQL, PHP und Apache auskommen.
Ich habe es schon geschafft, das zu erreichen, indem ich jede Version in einen eigenen Unterordner setze, dann Versionsinformationen in Cookies speicherte (vom Server bei jedem Login oder jeder Seite aktualisiert) und RewriteRules (rewriteRules) verwendete, um "Anfragen" von base / versionslose URL zum richtigen Unterordner. Wenn kein Cookie gesetzt ist, wird ein Standardordner durch eine Fallback RewriteRule ausgewählt.
Dieser Kludus funktioniert, fühlt sich aber extrem zerbrechlich an und belastet den Apache-Daemon zusätzlich. Daher frage ich hier, ob jemand einen besseren Weg kennt, dies zu tun.
Danke!
htaccess ermöglicht das Neuschreiben basierend auf dem Inhalt von Cookies . Da Apache AWESOME bei Redirects ist und PHP ausreichend ist, würde ich es so handhaben.
In diesem Beispiel wird getestet, ob ein Vers-Cookie vorhanden ist. Wenn das der Fall ist, fügt es 'vers =' + was auch immer in dem Vers-Cookie der Anfrage war hinzu.
%Vor%(Dieses Beispiel finden Sie hier )
Verwenden Sie eine einzelne RewriteRule, um alle -Anfragen an eine einzelne route.php
-Datei im Stammordner Ihrer Website weiterzuleiten.
Die Datei route.php
sollte wie folgt aussehen:
Dies ist der Grundriss dessen, was Sie in route.php
tun sollten. Es gibt einige andere sicherheitsrelevante und technische Probleme, auf die Sie in dieser Datei achten sollten.
Ich denke, ein besserer Weg in PHP wäre, einfach die Datenbank abzufragen, die gewünschte Version zu bekommen und dann include()
it aus einem Unterordner. Auf diese Weise ist es für den Benutzer transparent.
Wenn Sie beispielsweise annehmen, dass der Benutzer sich für die neue Beta entschieden hat, speichern Sie seinen Eintrag in der Datenbank,
%Vor%Und dann, wenn er auf die Seite zugreift, haben Sie etwas ähnliches:
%Vor%Obwohl es möglich ist, einen Routing-Mechanismus und Session-Informationen zu verwenden, um Regeln zu erstellen, würde ich Ihre aktuelle Lösung lieber behalten. Alles, was Sie tun würden, indem Sie es in PHP implementieren, ist, dass Sie die Last von der Apache2 (die bereits eine sehr schnelle Rewrite-Engine hat) in die PHP-Binärdatei schieben. Darüber hinaus riskieren Sie, dass Ihre Anwendung aufgrund von Inkompatibilitäten von Daten, Cookies und anderen sitzungsbasierten Variablen in störende Versionen gerät.
Andererseits haben Sie den Vorteil der Wiederverwendbarkeit von gemeinsamen Objekten wie Bibliotheken, Domänenmodellen, Data Mappern usw. Aber meiner Meinung nach belastet dieser Vorteil nicht die schlechtere Performance und das Interferenzrisiko.
In einem Satz glaube ich, dass Ihre derzeitige Lösung die beste ist.
Laden Sie Ihre versionierte Seite / Webseiten in IFRAME und IFRAME src könnte "webapp.com/v2" ..
seinDer Benutzer, der Ihre Adressleiste auswählt, liest also webapp.com..aber Ihre IFRAME-URL ändert sich je nach Version.
Es müssen keine Umschreibregeln geschrieben werden.
Das könnte helfen: Was ich seit einem Monat verwende, ist
Halten Sie alle Dateien in der Datenbank (Pfad, Code, Version = Dezimal (3,1), Flag: stabil = 3 / lab = 2 / beta = 1 / alpha = 0 )
.htaccess leitet alle nicht existierenden Dateien (leite nicht Bilder, css, js oder andere statische nicht versionierte Dateien um) intern zu loader.pm (für Sie loader.ph_) don Verwenden Sie nicht die gleiche Erweiterung wie Ihre anderen Dateien zur Unterscheidung
%Vor%loader lädt die letzte stabile Version aus der Datenbank- oder Beta-Version, wenn keine stabile Version existiert.
SELECT code, version, flag FROM table WHERE path = ? AND flag > 0 ORDER BY flag DESC, version DESC LIMIT 1
Zeige keine Alpha-Seiten, die sich in der Entwicklung befinden
Ausgabe 404 Fehler, wenn keine Ergebnisse und
Wenn die Version wie ?v=2.0
loader datei angegeben wird, wird eine andere Abfrage verwendet
SELECT code, version, flag FROM table WHERE path = ? AND version <= ? ORDER BY flag DESC LIMIT 1
Annahmen:
.. ORDER BY version DESC, flag DESC, ..
Probleme:
?v=
ist reserviert zum Auswählen von Versionen, aber das ist in Ordnung; Sie können ?var=
wählen
Es gibt eine Cloud-Plattform, die dies bei der Bereitstellung automatisch erledigt. www.cyligent.com
Es ist nur eine Frage des Setzens eines Cookies, sobald die zwei Versionen bereitgestellt werden. Viel weniger Arbeit als einige der anderen gezeigten Antworten.
Vollständige Offenlegung: Ich arbeite für Cycligent.
Tags und Links php apache multiple-versions ria