it-swarm.com.de

mod_rewrite: Umschreiben von http: //$SOMETHING.app.example.com/ nach http://www.example.com/app/$SOMETHING

Ich versuche, http://$SOMETHING.app.example.com/ transparent in http://www.example.com/app/$SOMETHING umzuschreiben.

Die Konfiguration unten gibt mir eine 404 und ich bin mir nicht sicher warum.

ServerName www.example.com
ServerAlias *.app.example.com

RewriteEngine On
RewriteCond %{HTTP_Host} (.*).app.example.com
RewriteRule ^/(.*) /app/%1/$1

Mir fehlt etwas Offensichtliches, was ist das?

Edit: lass mich das etwas klarer machen.

Wenn ich zu http://www.example.com/app/abc navigiere, erhalte ich eine Seite. Wenn ich zu http://abc.app.example.com/ navigiere, erwarte ich, dass dieselbe Seite angezeigt wird, aber stattdessen erhalte ich eine 404.

Edit2: Der DNS-Eintrag für *.app.example.com ist bereits vorhanden und ich kann meine Anforderung im Zugriffsprotokoll mit dem Status 404 sehen.

Edit3: Nach dem Aktivieren der mod_rewrite-Protokolldatei sieht es so aus, als ob der Pfad nach dem Umschreiben "$ DOCROOT/app/abc" lautet, was fehlschlägt, weil er nicht existiert. Dies ist eine Python/WSGI-Anwendung, ich denke, das hat etwas mit meinem Problem zu tun. Im Moment sieht es so aus, als würden wir stattdessen nur eine reguläre Weiterleitung verwenden.

1
ThatGraemeGuy

Sie müssen einen DNS-Eintrag für *.app.example.com. festlegen, um zur IP des Servers umzuleiten. Ich denke in deinem Fall ist das dasselbe wie der, auf den app.example.com. zeigt.

Edit: Ich denke, einer von diesen sollte den Trick machen (normalerweise beides):

RewriteCond %{HTTP_Host} !^app\.example\.com
RewriteCond %{HTTP_Host} ^([^.]+)
RewriteRule ^(.*) /app/%1/$1 [L]

RewriteCond %{HTTP_Host} ^([^.]+)\.app\.example\.com$
RewriteRule ^/(.*)$           http://www.example.com/app/%1/$1 [L,R]
2
Bart De Vos

Vielleicht so etwas wie:

RewriteEngine On
RewriteCond %{HTTP_Host} !^www\.example\.com
RewriteCond %{HTTP_Host} !^example\.com
RewriteCond %{HTTP_Host} ^(.)+\.example\.com
RewriteCond %{REQUEST_URI} !^/app/$1
RewriteRule ^(.*)$ app/$1/$2 [L]

Dies stellt sicher, dass Sie derzeit nicht direkt auf www.example.com oder example.com zugreifen. Nimmt dann Ihr Präfix, überprüft, ob Sie gerade nicht direkt auf die/app zugreifen (oder sie wird für immer wiederholt), und schreibt dann neu. Dies sollte transparent sein ..

Aus http://corz.org/serv/tricks/htaccess2.php

1
Ellipsis

Wir haben stattdessen eine externe Umleitung verwendet.

RewriteCond %{HTTP_Host} (.*).app.example.com
RewriteRule ^/(.*) http://www.example.com/app/%1/$1 [R]
0
ThatGraemeGuy