it-swarm.com.de

Virtuelles Hosting

Ich möchte Domains wie xxx.abc.domain.tld verwenden.
Das xxx ist mein zu erreichender Ordner. Ich habe es mit den Rewrite-Regeln versucht, aber ich kann es nicht zum Laufen bringen, weil ich nicht weiß, wie ich den Teil xxx von SERVER_NAME in meine RewriteRule bekomme.

Das war mein Versuch:

UseCanonicalName Off

# include the IP address in the logs so they may be split
LogFormat "%A %h %l %u %t \"%r\" %s %b" vcommon
CustomLog /var/log/Apache2/vaccess.log vcommon

RewriteEngine On

# a ServerName derived from a Host: header may be any case at all
RewriteMap lowercase int:tolower

## deal with normal documents first:
# do the magic
RewriteCond ${lowercase:%{SERVER_NAME}} ^.+\.abc\.domain\.tld$
RewriteRule ^(.*)$ /var/www/abc.domain.tld/[xxx-part]/$1 [L]

Vielleicht gibt es eine bessere Lösung.
Im Allgemeinen möchte ich mit mod_auth_mysql ein dynamisches Anmeldesystem erstellen und für jedes xxx gibt es eine separate Benutzerdatenbank.
Ich würde die Domain/Adress-Syntax abc.domain.tld/xxx vorziehen, aber ich weiß nicht, wie ich das realisieren soll.

Vielen Dank für alle Ratschläge.

2
H3llGhost

Wäre es nicht einfacher, den Hostnamen über eine RewriteCond-Rückreferenz in die Rewrite-Regel einzufügen?

UseCanonicalName Off

# include the IP address in the logs so they may be split
LogFormat "%A %h %l %u %t \"%r\" %s %b" vcommon
CustomLog /var/log/Apache2/vaccess.log vcommon

RewriteEngine On

# a ServerName derived from a Host: header may be any case at all
RewriteMap lowercase int:tolower

## deal with normal documents first:
# do the magic
RewriteCond ${lowercase:%{SERVER_NAME}} ^(.+)\.abc\.domain\.tld$
RewriteRule ^(.*)$ /var/www/abc.domain.tld/%1/$1 [L]

Siehe mod_rewrite Dokumentation unter RewriteRule "Rückverweise". Beachten Sie die Verwendung des %1 anstelle des $1 -Rückverweises. Dies sollte den Inhalt der Unterübereinstimmung mit regulären Ausdrücken in der obigen RewriteCond erfassen. Ich habe Klammern hinzugefügt, um den 'xxx'-Teil in der RewriteCond zu submatchen.

3
Jeff Stice-Hall

Wenn die verwendeten URLs das xxx als Teil des Servernamens enthalten, können Sie Name Based Virtual Hosts z.

Wenn Sie xxx.abc.domain.tld und yyy.abc.domain.tld haben, können Sie für jeden z.

NameVirtualHost *:80

<VirtualHost *:80>
    ServerName xxx.abc.domain.tld
    DocumentRoot /var/www/abc.domain.tld/xxx
</VirtualHost>

<VirtualHost *:80>
    ServerName yyy.abc.domain.tld
    DocumentRoot /var/www/abc.domain.tld/yyy
</VirtualHost>

und so weiter.

Wenn Sie abc.domain.tld/xxx, abc.domain.com.tld/yyy usw. verwenden möchten, richten Sie einfach einen einzelnen Host ein, definieren Sie den DocumentRoot, und/xxx,/yyy usw. sind nur Verzeichnisse unter DocumentRoot.

NameVirtualHost *:80

<VirtualHost *:80>
    ServerName www.domain.tld
    DocumentRoot /var/www/abc.domain.tld
</VirtualHost>

Nun würde abc.domain.tld/xxx zu /var/www/abc.domain.tld/xxx und so weiter geleitet.

1
user2483