Kohana 3 mod_rewrite i błąd „No input file specified”

Podziel się z innymi!

    Stawiałem już projekty oparte na frameworku Kohana 3 na różnych serwerach. Jak dotąd zawsze działał mi plik .htaccess o treści:

    # Turn on URL rewriting
    RewriteEngine On
     
    # Installation directory
    RewriteBase /
     
    # Protect application and system files from being viewed
    RewriteRule ^(?:application|modules|system)\b - [F,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]

    (No ok mój plik htaccess jest bardziej robudowany, ale dla przejrzystości problemu podaję wersję minimalną – standardzik.)

    Dzisiaj jednak szybkie i przyjemne przerzucenie projektu na serwer docelowy zostało brutalnie zburzone przez niemiły komunikat „No input file specified”, który pokazywał mi się przy próbie przejścia na dowolną podstronę.

    Początkowo próbowałem użyć dyrektywy .htaccess-a

    Options -MultiViews

    Przy jakimś projekcie to mi kiedyś pomogło o ile dobrze kojarzę, ale tym razem nie.

    Problematyczna okazała się linijka:

    RewriteRule .* index.php/$0 [PT]

    , którą na wszelkich forach, blogach itd. proponowano zastąpić na kilka różnych sposobów

    RewriteRule .* index.php?$0 [PT,L,QSA]

    albo

    RewriteRule .* index.php [L]

    jednemu podobno zadziałało coś takiego

    RewriteRule .* index.php?kohana_uri=$0 [PT,L,QSA]

    Mnie zadziałało dowolne z powyższych rozwiązań, ale tylko połowicznie. To znaczy – komunikat błędu zniknął, ale za to bez względu na wybraną podstronę zawsze pokazywała mi się strona główna. Nienawidzę takich zagadek.

    Przeanalizowałem zawartość tablicy $_SERVER na moim serwerze testowym oraz produkcyjnym i wyszło mi, że na tym drugim brakuje PATH_INFO. Widać routing Kohany (przynajmniej w wersji 3.0) korzysta z tej wartości i bez niej zwyczajnie przestaje działać.

    Ostatecznym remedium na mój kłopot okazało się prostackie obejście

    $_SERVER['PATH_INFO'] = $_SERVER['REQUEST_URI'];

    Ja osobiście dodałem to w bootstrapie.

    Podziel się z innymi!

      4 Comments

      1. Wojciech Fornal

        Ciekawy post. Sprawdzę u siebie trop, który wyłuskałeś bo też miałem przygody z „no input…”.
        Próbowałeś w ten sposób:
        RewriteRule .* index.php?/$0 [PT]
        ?
        U mnie załatwiło to problem i na lokalu i na trzech zewnętrznych hostingach.
        Pozdrawiam

      2. Krzysiek

        Podane rozwiązanie z PATH_INFO raczej wprowadziło problemy jak pomogło, ale „RewriteRule .* index.php?kohana_uri=$0 [PT,L,QSA]” okazało się zbawienne.

        Kohana 3.3, PHP 5.3, hosting na linuxpl.com

        Dzięki za ten post! 🙂

      3. lukaskolista

        Ze swojej strony polecam zastosować:
        RewriteRule .* index.php [PT]
        zamiast
        RewriteRule .* index.php/$0 [PT]
        i powinno działać. Rozwiązanie opisane w tym wpisie powoduje dodanie do sekcji query (tej za ? w URL) parametru kohana_uri= w przypadku odswieżenia strony przez serwer (nagłówkiem). Jeżeli moje rozwiązanie nie pomoże, to odsyłam do oficjalnej dokumentacji tego problemu
        http://kohanaframework.org/3.2/guide/kohana/tutorials/clean-urls#2-url-rewriting
        gdzie problem .htaccess jest dogłębnie przeanalizowany.

      Dodaj komentarz

      Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *