Ich habe folgende virtuelle Hosts:
<VirtualHost *:443>
ServerName article.example.com
AliasMatch "^/(.*)" "/var/www/html/article.php"
</VirtualHost>
<VirtualHost *:443>
ServerName company.example.com
AliasMatch "^/(.*)" "/var/www/html/company.php"
</VirtualHost>
Ich möchte alles unter einem virtuellen Host zusammenfassen, und zwar so:
<VirtualHost *:443>
ServerName example.com
ServerAlias *.example.*
AliasMatch "^(article|company)\.example\.*/(.*)" "/var/www/html/$1.php"
</VirtualHost>
Ist das möglich? Muss ich Mod Rewrite verwenden? Ich möchte bestimmte Subdomains verwandten Dateien auf meinem Server zuordnen, ohne die URL zu ändern. Ich möchte article.example.com/test-article
zuordnen zu article.php
.
Antwort1
AliasMatch "^(article|company)\.example\.*/(.*)" "/var/www/html/$1.php"
Die AliasMatch
Direktive gleicht den angefragten URL-Pfad ab (wie im ersten Beispiel), nicht denHostname(wie Sie es hier versuchen), also wird so etwas nicht übereinstimmen.
Die naheliegende Wahl wäre mod_rewrite, wie Sie vorschlagen. Zum Beispiel:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^(article|company)\.
RewriteRule ^ /var/www/html/%1.php [L]
Wenn die %1
Rückreferenz die Übereinstimmung mit dem erfassten Teilmuster im vorhergehenden enthältBedingungsmuster.
Wenn /var/www/html
die Dokumentwurzel ist, kann dies ausgelassen werden inAuswechslungZeichenfolge, die in einen zum Dokumentstammsatz relativen URL-Pfad anstelle eines absoluten Dateipfads umgeschrieben wird, d. h. einfach /%1.php
.
Sie könnten es allgemeiner gestalten und die Anfrage für jede Subdomäne neu schreiben, wenn diese Subdomäne als .php
Datei im Dokumentstamm vorhanden ist. Beispiel:
RewriteCond %{HTTP_HOST} ^([^.]+)\.example
RewriteCond %{DOCUMENT_ROOT}/%1.php -f
RewriteRule ^ /%1.php [L]