2012-07-18 19 views
7

Ich versuche, meine Apache Vhosts aufzuräumen, da ich eine Reihe von 'Alias' an Ort und Stelle habe, und sie alle in ein mod_rewrite zu setzen kann nervig sein. Doch während ich auf bestimmte URLs (wie http://example.dev/robots.txt, http://example.dev/ auf seine eigene bekommen, wird die vhost nicht auf die angegebene URL zurückgreifen (FallbackResource /index.php).FallbackResource auf Apache2 (2.2.22 (Ubuntu))

Der vhost ist ein Container für ein Zend Framework Projekt und kein .htaccess-Dateien sind so eingestellt

Das Zugriffsprotokoll .... "GET/HTTP/1.1" 302 0 zeigt, aber Google Chrome ‚Keine Daten empfangen‘ und angezeigt wird. ‚Fehler 324 (net :: ERR_EMPTY_RESPONSE): Der Server hat die Verbindung ohne Absenden alle Daten geschlossen.‘

Die FallbackResource Zeile auskommentieren und die <Location /> -basierte mod_rewrite wieder aktivieren, funktioniert als ex allerdings gesehen.

BEARBEITEN Sie: Es gibt nichts im vhost, das ich sehen kann, um es zu stoppen zu funktionieren. Ein paar Alias Zeilen (mit denen FallbackResource arbeiten soll) und einige FilesMatch, um den Zugriff auf Datei mit bestimmten Erweiterungen zu stoppen. Das einzige, was in den Protokollen auftaucht, ist das 404, wenn es versucht, zur URL zu gehen und nicht zur index.php (der aufgelisteten Ressource).

<VirtualHost *:80> 
    ServerAdmin [email protected] 
    ServerName example.com 
    ServerAlias www.example.com 

    DocumentRoot /var/website/current/html/ 

    SetEnv APPLICATION_ENV productionbackend 

    # must be most specific first 
    Alias /i/static /var/website/static/i 
    # more /i/* Alias 
    Alias /i  /var/website/current/resources/common-furniture/ 

    # protecting files in the directory. 
    <FilesMatch ".*\.xml"> 
     Order allow,deny 
     Deny from all 
    </FilesMatch> 

    <Directory "/var/website/current/html/"> 
     Options FollowSymLinks All 
     AllowOverride All 
    </Directory> 

    ErrorLog logs/error.log 
    CustomLog logs/access.log common 
</VirtualHost> 
+0

Alles in den Apache-Fehlerprotokollen? – nneonneo

+0

Gibt es eine Direktive in Ihrem vhost, die verhindern kann, dass FallbackResource funktioniert? Bitte posten Sie einen größeren Abschnitt Ihrer vhost-Konfiguration. –

+0

Haben Sie das jemals gelöst? Ich habe das gleiche Problem. – Marlun

Antwort

3

Ich habe eine Lösung. Wie ich in meinem Kommentar zu der ursprünglichen Frage gesagt habe, habe ich auch das gleiche Problem. Mein vhost ist extrem einfach:

<VirtualHost *:8029> 
    DocumentRoot "C:\path\to\wwwroot" 
    ServerName localhost 
     <Directory /> 
       AllowOverride All 
     </Directory> 
</VirtualHost> 

und meine .htaccess nur enthält:

FallbackResource index.html 

Ich habe DirectoryIndex meiner .htaccess-Datei hinzugefügt. Es liest jetzt:

FallbackResource /index.html 
DirectoryIndex index.html 

Dies hat das Problem gelöst.

Warum funktioniert das?

Die leere Antwort trat nur auf, wenn die URL / das zweite Mal aufgerufen wurde und sie vom Browser zwischengespeichert wurde. Aus irgendeinem Grund scheint es, dass FallbackResource in diesem Fall fehlschlägt, so dass ich dachte, dass, indem sichergestellt wird, dass die index.html über die Angabe DirectoryIndex bedient wird, kein Fallback erforderlich wäre. Sie könnten dies als Workaround bezeichnen.

+2

Diese Antwort ist an einer Reihe von Fronten schlecht: Als erstes setzen Sie 'AllowOverride All' in' '- das bedeutet, dass Sie nicht nur benutzerdefinierte Konfigurationen ÜBERALL erlauben, sondern auch httpd, um es ÜBERALL zu überprüfen . Dies hat enorme Auswirkungen auf Leistung und Sicherheit. Dann verwenden Sie, obwohl Sie vollständigen Zugriff auf die Konfiguration haben, einen Teil Ihrer Konfiguration in ein '.htaccess ': Ich möchte wiederholen, dass dies nur für * Benutzer * nützlich ist, die * nicht * (und * sollten) * nicht haben) Zugriff auf den Server oder seine Konfiguration. –

+1

Richtig du bist @ IgorGalić :) Ich hätte beachten müssen, dass dies eine Dev-Lösung nur als meine 'ist.htaccess' ist bequemerweise unter VCS und meine systemweite 'httpd-vhosts.conf' ist nicht. Ich werde meine Konfiguration in die 'httpd-vhosts.conf' auf der tatsächlichen Bereitstellung setzen. Danke fürs Kommentieren. –

Verwandte Themen