Ich habe eine RewriteRule geschrieben, die auf der Basis von HTTP_HOST (www.domainname.com) funktioniert, aber ich möchte, dass sie nur auf der Basis des Domänennamenteils (domainname.com) funktioniert.
Zur weiteren Verdeutlichung
Die Ordnerstruktur ist /var/www/domainName.com
.
Wenn ich diese Regel in die Apache-Konfigurationsdatei schreibe
RewriteRule ^/js/(.*) /%{HTTP_HOST}/js/$1 [L]
und greifen Sie über www.mydomain.com auf die Site zu. Es wird versucht, den Ordner zu finden /var/www/www.domainName.com
, der nicht existiert.
Daher muss ich die oben genannte Regel konvertieren, um das „www“ aus dem HTTP_HOST zu entfernen.
Antwort1
Ich würde vorschlagen, dass Sie Anfragen umleiten, anstatt dieselbe Site an zwei Orten verfügbar zu machen. Erstellen Sie entweder einen neuen VirtualHost, um den Datenverkehr umzuleiten:
<VirtualHost *:80>
ServerName www.domainName.com
Redirect / http://domainName.com/
</VirtualHost>
Oder fügen Sie über Ihren anderen Regeln einen Satz hinzu, der das Vorhandensein des Präfixes „www.“ erkennt und den Benutzer umleitet:
RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
RewriteRule /(.*) http://%1/$1 [R,L]
Wenn Sie Ihre Site wirklich auf beiden Domänennamen ohne Weiterleitung haben möchten, können Sie mithilfe von „RewriteCond“ nur den Domänennamen herausziehen. Dieser steht dann der RewriteRule als %1 zur Verfügung.
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.*) [NC]
RewriteRule ^/js/(.*) /%1/js/$1 [L]
Antwort2
Ich bezweifle, dass Sie dazu in der Lage sind. Wäre es nicht einfacher, einfach Links zu entsprechenden Verzeichnissen zu erstellen?
ln -s yourdomain.com www.yourdomain.com
Antwort3
Haben Sie versucht, zu verwenden %{DOCUMENT_ROOT}
?
Auch möglich, wenn Du in Deinem vHost den gleichen Namen eingestellt hast, Servername
den Du in Deiner Verzeichnisstruktur verwendest, zB:
<VirtualHost *:80>
DocumentRoot /var/www/domainame.com
ServerName domainame.com
ServerAlias www.domainame.com
</VirtualHost>
Dann können Sie es %{SERVER_NAME}
in Ihrer Umschreibregel verwenden.
Antwort4
wie ich Ihre Frage verstehe, stellen Sie einfach IhreDokument Rootin das richtige Verzeichnis:
DocumentRoot /var/www/domainName.com