2012-07-18 21 views
7

Próbuję wyczyścić moje apache vhosts, ponieważ mam kilka "Alias ​​w miejscu, a umieszczenie ich wszystkich w mod_rewrite może być denerwujące. Jednakże, o ile mogę dostać się do określonych adresów URL (takie jak http://example.dev/robots.txt, http://example.dev/ na własną rękę, vhost nie spadnie z powrotem do wymienionych URL (FallbackResource /index.php).FallbackResource na Apache2 (2.2.22 (Ubuntu))

vhost jest kontenerem dla projektu Zend Framework, a nie pliki .htaccess są ustawione

dziennik dostęp pokazuje .... "GET/HTTP/1.1" 302 0, ale Google Chrome pokazuje „Brak danych otrzymana” i ". błąd 324 (net :: ERR_EMPTY_RESPONSE): serwer zakończył połączenie bez wysyłania jakichkolwiek danych.

Komentowanie linii FallbackResource i ponowne włączanie mod_rewrite opartej na <Location /> działa jako ex jednak zainteresowani.

EDYCJA: Nie ma nic w duchu, którego widzę, aby powstrzymać działanie. Kilka linii Alias (z którymi powinien współpracować FallbackResource) i niektóre FilesMatch, aby zatrzymać dostęp do pliku z konkretnymi rozszerzeniami. Jedyną rzeczą pojawiającą się w dziennikach jest 404, gdy próbuje przejść do adresu URL, a nie do index.php (zasób wymieniony).

<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

Coś w dziennikach błędów Apache? – nneonneo

+0

Czy istnieje jakiś dyrektyw w twoim vhost, które mogą uniemożliwić FallbackResource? Opublikuj większy fragment konfiguracji vhost. –

+0

Czy kiedykolwiek rozwiązałeś to? Mam ten sam problem. – Marlun

Odpowiedz

3

Mam rozwiązanie. Jak już wspomniałem w swoim komentarzu do pierwotnego pytania, mam również ten sam problem. Moja vhost jest bardzo prosta:

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

i mój .htaccess zawiera wyłącznie:

FallbackResource index.html 

Dodałem DirectoryIndex do mojego pliku .htaccess. Teraz brzmi:

FallbackResource /index.html 
DirectoryIndex index.html 

To rozwiązało problem.

Dlaczego to działa?

Pusta odpowiedź wystąpiła tylko wtedy, gdy adres URL / został wywołany po raz drugi i został zbuforowany przez przeglądarkę. Z jakiegoś powodu wygląda na to, że w tym przypadku kończy się niepowodzeniem FallbackResource, więc doszedłem do wniosku, że poprzez zapewnienie, że plik index.html jest obsługiwany przez podanie wartości DirectoryIndex, nie ma potrzeby zastępowania. Można to nazwać obejściem.

+2

Ta odpowiedź jest niepoprawna na wielu frontach: Po pierwsze ustawiasz "AllowOverride All" w "" - co oznacza, że ​​nie tylko pozwalasz na zdefiniowanie przez użytkownika konfiguracji WSZĘDZIE, ale także instruujesz httpd, aby to sprawdził WSZĘDZIE . Ma to OGROMNY wpływ na wydajność i bezpieczeństwo. Następnie, mimo że masz pełny dostęp do konfiguracji, używasz wpisywania części swojej konfiguracji do '.htaccess': Chciałbym powtórzyć, że jest to przydatne tylko dla * użytkowników *, którzy * nie * (i * powinni * nie ma) dostępu do serwera lub jego konfiguracji. –

+1

Dobrze, że jesteś @ IgorGalić :) Powinienem był zauważyć, że jest to rozwiązanie dev tylko jako moje '.htaccess' jest wygodnie pod VCS, a mój systemowy 'httpd-vhosts.conf' nie jest. Wprowadzę moją konfigurację do 'httpd-vhosts.conf' na rzeczywistym wdrożeniu. Dzięki za komentowanie. –