]> granicus.if.org Git - php/commitdiff
restore FPM compatibility with mod_fastcgi broken since #694 / 67541, fixes bug 67606
authorDavid Zuelke <dzuelke@gmail.com>
Sat, 9 Aug 2014 06:26:33 +0000 (08:26 +0200)
committerStanislav Malyshev <stas@php.net>
Fri, 29 Aug 2014 06:06:00 +0000 (23:06 -0700)
sapi/fpm/fpm/fpm_main.c

index e8793259b4c5016e7ef29b236da662af45c35852..56a06f90ee33efdeb392136a3d52a54c20fcc071 100644 (file)
@@ -1142,13 +1142,16 @@ static void init_request_info(TSRMLS_D)
                                TRANSLATE_SLASHES(env_document_root);
                        }
 
-                       if (env_path_translated != NULL && env_redirect_url != NULL &&
+                       if (!apache_was_here && env_path_translated != NULL && env_redirect_url != NULL &&
                            env_path_translated != script_path_translated &&
                            strcmp(env_path_translated, script_path_translated) != 0) {
                                /*
                                 * pretty much apache specific.  If we have a redirect_url
                                 * then our script_filename and script_name point to the
                                 * php executable
+                                * we don't want to do this for the new mod_proxy_fcgi approach,
+                                * where redirect_url may also exist but the below will break
+                                * with rewrites to PATH_INFO, hence the !apache_was_here check
                                 */
                                script_path_translated = env_path_translated;
                                /* we correct SCRIPT_NAME now in case we don't have PATH_INFO */
@@ -1323,7 +1326,7 @@ static void init_request_info(TSRMLS_D)
                                        efree(pt);
                                }
                        } else {
-                               /* make sure path_info/translated are empty */
+                               /* make sure original values are remembered in ORIG_ copies if we've changed them */
                                if (!orig_script_filename ||
                                        (script_path_translated != orig_script_filename &&
                                        strcmp(script_path_translated, orig_script_filename) != 0)) {
@@ -1332,7 +1335,9 @@ static void init_request_info(TSRMLS_D)
                                        }
                                        script_path_translated = _sapi_cgibin_putenv("SCRIPT_FILENAME", script_path_translated TSRMLS_CC);
                                }
-                               if (env_redirect_url) {
+                               if (!apache_was_here && env_redirect_url) {
+                                       /* if we used PATH_TRANSLATED to work around Apache mod_fastcgi (but not mod_proxy_fcgi,
+                                        * hence !apache_was_here) weirdness, strip info accordingly */
                                        if (orig_path_info) {
                                                _sapi_cgibin_putenv("ORIG_PATH_INFO", orig_path_info TSRMLS_CC);
                                                _sapi_cgibin_putenv("PATH_INFO", NULL TSRMLS_CC);