2016-05-01 10 views
0

Ich versuche, eine bestehende Website, Route pro Route langsam übernehmen. Ich fand Apache Alias(Match), die mir erlaubt, eine andere (Inhalt) Dokumentstamm pro Anfrage festzulegen. Aber ich scheitere mit Schrägstrichen und komplexeren Pfaden.Split DocumentRoot mit Apache Alias ​​pro Anfrage Pfad

Mein Ziel ist es nun, die alte Website so zu bedienen, wie sie es gewohnt ist. Und um eine neue Website zu haben, die eine erste spezifische Anfrage erfüllt, sagen Sie /foo und /foo/*.

Ich habe meine vHost Setup wie folgt aus:

<VirtualHost *:80> 
    ServerName example.com 
    UseCanonicalName on 

    AliasMatch ^/foo/(.*)$ /www/new/$1 
    AliasMatch ^/foo$ /www/new/$1 
    <Directory /www/new/> 
     Options +FollowSymLinks -MultiViews 
     AllowOverride All 
     Require all granted 
    </Directory> 

    DocumentRoot /www/old 
    <Directory /www/old/> 
     Options +FollowSymLinks -MultiViews 
     AllowOverride All 
     Require all granted 
    </Directory> 
</VirtualHost> 

In beiden Verzeichnissen Ich habe ein .htaccess mit:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-l 
RewriteRule ^(.*)$ index.php/$1 [L] 

Die index.php ‚s Show 'alten' oder 'neuen' je nach ihrer Verzeichnis.

Was zu den verschiedenen Routen passiert, ich teste:

  • Wenn example.com/bar aufgefordert wird, zeigt ‚alte‘.
  • Bei Anforderung example.com/foo leitet es auch /foo/ um und zeigt dann "neu".
  • Bei Anforderung example.com/foo/bar zeigt es "alt".

Ich möchte nicht die erzwungene Umleitung von /foo zu /foo/. Und ich möchte /foo/bar zeigen "neu".

Ich habe Apache's mod_alias verfolgt, um die multiple AliasMatch Direktiven zu bekommen, um alles nach /foo zu fangen, aber anscheinend funktioniert das nicht richtig. Außerdem lese ich nichts davon, dass der abschließende Schrägstrich magisch hinzugefügt wird.

Wer kennt die Zaubertricks?

Antwort

0

Ich habe in der Lage, dies zu beheben, indem Sie den Alias ​​Einstellung direkt auf die index.php Punkt:

AliasMatch ^/foo/(.*)$ /www/new/index.php 
AliasMatch ^/foo$ /www/new/index.php 

Dann /bar und alles andere geht zur alten Website und /foo, /foo/ und /foo/bar geht auf die neue Website.

ist es zwei Nachteile dieser Methode:

  • Die .htaccess in der neuen Website ist komplett übersprungen. Aber wie ich es hauptsächlich benutze, um die index.php jede Route aufnehmen zu lassen, ist das im Moment in Ordnung.
  • Frontend-Ressourcen wie css/js gehen auf die alte Website. Fix das mit einem anderen einfachen Alias: example.com/frontend/app.css + Alias /frontend /www/new/public_html/frontend.