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.