Tenemos lo que se supone que es una configuración bastante estándar de Apache+php-fpm, pero cuando una URL incluye información de ruta después del nombre del script, sucede algo extraño: trata la información de la ruta como un nombre de script relativo a la raíz web. Me gusta esto:
# cat foo.php <?php print 'I am foo! PATH_INFO = "' . $_SERVER['PATH_INFO'] . '"; SCRIPT_NAME = "' . $_SERVER['SCRIPT_NAME'] . '"; PHP_SELF = "' . $_SERVER['PHP_SELF'] . '"' ?> # cat bar.php <?php print 'I am bar! PATH_INFO = "' . $_SERVER['PATH_INFO'] . '"; SCRIPT_NAME = "' . $_SERVER['SCRIPT_NAME'] . '"; PHP_SELF = "' . $_SERVER['PHP_SELF'] . '"' ?> # curl -kw\\n https://localhost/xxx/foo.php I am foo! PATH_INFO = ""; SCRIPT_NAME = "/xxx/foo.php"; PHP_SELF = "/xxx/foo.php" # curl -kw\\n https://localhost/xxx/bar.php I am bar! PATH_INFO = ""; SCRIPT_NAME = "/xxx/bar.php"; PHP_SELF = "/xxx/bar.php" # curl -kw\\n https://localhost/xxx/foo.php/xxx/bar.php I am bar! PATH_INFO = "/xxx/bar.php"; SCRIPT_NAME = "/xxx/foo.php"; PHP_SELF = "/xxx/bar.php"Esperaba que el último diera algo como (corrígeme si me equivoco):
I am foo! PATH_INFO = "/xxx/bar.php"; SCRIPT_NAME = "/xxx/foo.php"; PHP_SELF = "/xxx/foo.php/xxx/bar.php" Tenemos lo siguiente en /etc/httpd/conf.d/php-fpm.conf :
<IfModule proxy_fcgi_module> # Enable http authorization headers <IfModule setenvif_module> SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1 </IfModule> <FilesMatch ".+\.ph(p[3457]?|t|tml)$"> SetHandler "proxy:fcgi://localhost:9000" </FilesMatch> <FilesMatch ".+\.phps$"> # Deny access to raw php sources by default # To re-enable it's recommended to enable access to the files # only in specific virtual host or directory Require all denied </FilesMatch> # Deny access to files without filename (eg '.php') <FilesMatch "^\.ph(p[3457]?|t|tml|ps)$"> Require all denied </FilesMatch> </IfModule>Apache versión 2.4.6 y php71-php-fpm-7.1.33. Tenemos una aplicación que espera el comportamiento 'normal', ¿cómo podemos obtenerlo con php-fpm?