Apache: Virtuelle Host und URL-Rewriting innerhalb httpd.conf für Kohana Framework
Ich bin mit dem Kohana Framework 3.x. Mein Webserver ist Apache und ich mit Virtual Hosts, weil ich mehr als ein websites, die mit meinem Server.
Meine httpd.conf sieht wie folgt aus:
<VirtualHost *:80>
ServerName www.myPage1.com
ServerAlias myPage1.com
DocumentRoot /var/www/myPage1
</VirtualHost>
<VirtualHost *:80>
ServerName www.myPage2.com
ServerAlias myPage2.de
DocumentRoot /var/www/myPage2
</VirtualHost>
In Kohana jeder http-request muss gehen, um die index.php erste. Weil ich nicht wie diese hässliche URLs, die beginnt mit index.php (zum Beispiel www.myPage1.com/index.php/item/detail/itemId) ich habe die folgenden .htaccess-Datei, die funktioniert perfekt
# Turn on URL rewriting
RewriteEngine On
# Installation directory
RewriteBase /
# Protect hidden files from being viewed
<Files .*>
Order Deny,Allow
Deny From All
</Files>
# Protect application and system files from being viewed
RewriteRule ^(?:application|modules|system)\b.* index.php/$0 [L]
# Allow any files or directories that exist to be displayed directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# Rewrite all other URLs to index.php/URL
RewriteRule .* index.php/$0 [PT]
Nun möchte ich nicht verwenden .htaccess-Datei mehr, und stattdessen setzen alle der rewrite-Logik in meine httpd.conf-Datei. Das folgende gibt mir ein "400 Bad Request"
<VirtualHost *:80>
RewriteEngine On
<Files .*>
Order Deny,Allow
Deny From All
</Files>
RewriteRule ^(?:aplication|modules|system)\b.* index.php/$0 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php/$0 [PT]
ServerName www.myPage2.com
ServerAlias myPage2.com
DocumentRoot /var/www/myPage2
</VirtualHost>
Was mache ich falsch? Hilfe würde geschätzt!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben Sie keine RewriteBase in deiner httpd.conf. Und was ist falsch mit dem .htaccess?
.htaccess
, die im wesentlichen als ein extra-Zugriff auf die Festplatte für jedes Verzeichnis innerhalb des document-root-in der Anforderung Weg, auf jede Anfrage. Ihr server läuft erheblich schneller, wenn Sie die turn-Scans für Dateien aus (AllowOverride None
).Wenn Sie mit mod_rewrite in eine
VirtualHost
block mit derREQUEST_FILENAME
Zustand, Sie nicht get den Dateinamen (dieser ist pro die Dokumentation). Stattdessen enthält diese variable den gleichen Wert wieREQUEST_URI
enthält den Pfad ohne query-string.Zitat aus dem oben verlinkten Seite:
Allerdings habe ich festgestellt, dass die Lösungsvorschlag
%{LA-U:REQUEST_FILENAME}
funktioniert nicht, zumindest nicht für die virtuellen hosts auf meinem server. Werden Sie sicher, dass IhreRewriteCond
Zeilen-Funktion wie erwartet, in einerVirtualHost
Blocks, Sie sollten Präfix mitDOCUMENT_ROOT
so:Diese Methode wird immer funktionieren. Der Schalter
_URI
im FallREQUEST_FILENAME
eines Tages gibt die eigentlichen Dateinamen, um zu vermeiden, ein doppelt-das voranstellen des document root.Denken Sie daran, wenn Sie diese Regeln in der Haupt-server-conf-Datei (normalerweise httpd.conf) anstelle einer .htaccess-Datei, müssen Sie mit ^/... ... statt ^... ... am Anfang der RewriteRule-Zeile, in anderen Worten, fügen Sie einen Schrägstrich.
überprüfen, kann helfen.
könnte es sein das Tippfehler (vielleicht sollte es "Anwendung"):