Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: mod_rewrite fastcgi + suexec
Forum PHP.pl > Forum > Serwery WWW
nospor
Mam plik .htaccess o następującej treści
Kod
IndexIgnore *

Options +FollowSymlinks
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !=/favicon.ico
RewriteRule (.*)         index.php/$1 [L]

NIestety ten plik (ta regułka) nie działa. Wpisując adres, który nie istnieje, zamiast przenieść na index.php to serwer na stronie wywala
"No input file specified. "

Dzieje się tak gdy mam ustawione php w trybie fastcgi. Rozumiem, że w takim trybie taki htaccess nie pójdzie za dobrze. Co innego gdyby był w trybie mod-php.
Znalazłem na necie kilka prób zmodyfikowania tego .htaccess by działał poprawnie, ale niestety u mnie działały.

Macie jakieś z tym doświadczenia?
webdice
W jaki sposób przekazujesz parametry do parsera PHP, a co ważniejsze jakie? Korzystasz a php-fpm? Napisz trochę więcej informacji.
nospor
Hmmm, parametry do parsera php? W żaden sposób tego nie przekazuje. Całość jest odpalana przez przeglądarkę i ja nic nie przekazuję dodatkowo

php-fpm? Odpalam to na hostingu. Panelem do zarządzania na tym hostingu jest ISPConfig
webdice
Fastcgi musi widzieć jaka jest ścieżka do pliku. Dawno nie konfigurowałem apache i nie pamiętam dokładnie jak to wyglądało, być może coś mieszam nginx. Powiedz mi jeszcze czy problem występuje tylko z .htaccess? Czy przy bezpośrednim odwołaniu się do pliku jest tak samo?
nospor
mam stronkę:
http://blabla.pl/
I ta stronka działa.

Teraz mam np link
http://blabla.pl/szukaj

Oczywiście taki katalog jak szukaj nie istnieje. Ale właśnie ten .htaccess miał w takim wypadku przekierować na index.php i już w index.php ruter by mi wywołał odpowiednią akcję. I normalnie na normalnym php, który jest odpalany jako mod apache to działa.
Niestety gdy php działa w trybie fastcgi to już coś takiego nie działa.

Próbowałem już z takimi kodami (znalazłem na necie):
Kod
IndexIgnore *

Options +FollowSymLinks +ExecCGI


RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !=/favicon.ico
RewriteRule (.*)        /usr/bin/php index.php/$1 [QSA,L]

Tu jak widzisz podaje sciezkę do php. ale wywala internal serwer error (500)
Cytat
Additionally, a 500 Internal Server Error error was encountered while trying to use an ErrorDocument to handle the request.


Próbowałem też podawać samą pełną scieżkę do index.php ale nadal ten sam internal serwer error.
webdice
Możesz spróbować:

Kod
RewriteRule (.*)         index.php?/$1 [L]


Spróbuj dodać do php.ini cgi.fix_pathinfo = 0.
erix
~webdice ma rację. Miałem ostatnio podobny problem. I ma on miejsce tylko przez (Fast)CGI, czyli pod Zend Server również. Zmarnowaliśmy na to ostatnio kilka godzin. ^^.

Przepisywanie zaraz po rozszerzeniu działa tylko pod mod_php albo filter.

Cytat
Spróbuj dodać do php.ini cgi.fix_pathinfo = 0.

To nie od tego. wink.gif
nospor
No żesz.... dodatkowy znak zapytania
@webdice, @erix skądżeście to wiedzieli?
webdice
Cytat(erix @ 31.05.2011, 16:20:35 ) *
To nie od tego. wink.gif


Co masz konkretnie na myśli?

Cytat(nospor @ 1.06.2011, 13:41:39 ) *
No żesz.... dodatkowy znak zapytania
@webdice, @erix skądżeście to wiedzieli?


Do parsera musisz przekazać takie zmienne jak DOCUMENT_ROOT, SCRIPT_PATH itp, czasem jest tak że właśnie brakuje pytajnika, slasha. Człowiek się kiedyś na męczył to wie wink.gif.
erix
Cytat
Do parsera musisz przekazać takie zmienne jak DOCUMENT_ROOT, SCRIPT_PATH itp, czasem jest tak że właśnie brakuje pytajnika

Tylko że akurat w tym przypadku serwer przepuszcza SCRIPT_PATH w całości jako nazwę pliku, a nie podzieloną na REQUEST_URI i SCRIPT_PATH. wink.gif
webdice
Cytat(erix @ 1.06.2011, 14:05:44 ) *
Tylko że akurat w tym przypadku serwer przepuszcza SCRIPT_PATH w całości jako nazwę pliku, a nie podzieloną na REQUEST_URI i SCRIPT_PATH. wink.gif


To już zależy od konkretnej konfiguracji, której w tym wypadku nie widzieliśmy. Poza tym nie chce się wykłócać bo tak jak mówiłem z konfiguracją Apache miałem do czynienia dość dawno temu.

EDIT: Na przykładnie nginx:

Kod
fastcgi_param  QUERY_STRING       $query_string;
fastcgi_param  REQUEST_METHOD     $request_method;
fastcgi_param  CONTENT_TYPE       $content_type;
fastcgi_param  CONTENT_LENGTH     $content_length;

fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
fastcgi_param  REQUEST_URI        $request_uri;
fastcgi_param  DOCUMENT_URI       $document_uri;
fastcgi_param  DOCUMENT_ROOT      $document_root;
fastcgi_param  SERVER_PROTOCOL    $server_protocol;

fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;

fastcgi_param  REMOTE_ADDR        $remote_addr;
fastcgi_param  REMOTE_PORT        $remote_port;
fastcgi_param  SERVER_ADDR        $server_addr;
fastcgi_param  SERVER_PORT        $server_port;
fastcgi_param  SERVER_NAME        $server_name;

fastcgi_param    SCRIPT_FILENAME        /home/domains/xxx/Public$fastcgi_script_name;
fastcgi_param    DOCUMENT_ROOT        /home/domains/xxx/Public;


Może Ci to troszkę rozjaśni temat.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.