Use $_SERVER['REQUEST_URI'] instead of $_SERVER['PATH_INFO'], because Apache 2.x...
authorTim Starling <tstarling@users.mediawiki.org>
Sat, 12 May 2007 15:44:54 +0000 (15:44 +0000)
committerTim Starling <tstarling@users.mediawiki.org>
Sat, 12 May 2007 15:44:54 +0000 (15:44 +0000)
includes/WebRequest.php

index 53273a2..f8e3c72 100644 (file)
@@ -46,14 +46,31 @@ class WebRequest {
                $this->checkMagicQuotes();
                global $wgUsePathInfo;
                if ( $wgUsePathInfo ) {
-                       if ( isset( $_SERVER['ORIG_PATH_INFO'] ) && $_SERVER['ORIG_PATH_INFO'] != '' ) {
+                       // PATH_INFO is mangled due to http://bugs.php.net/bug.php?id=31892
+                       // And also by Apache 2.x, double slashes are converted to single slashes.
+                       // So we will use REQUEST_URI if possible.
+                       $title = '';
+                       if ( !empty( $_SERVER['REQUEST_URI'] ) ) {
+                               global $wgArticlePath;
+                               $url = $_SERVER['REQUEST_URI'];
+                               if ( !preg_match( '!^https?://!', $url ) ) {
+                                       $url = 'http://unused' . $url;
+                               }
+                               $a = parse_url( $url );
+                               // Find the part after $wgArticlePath
+                               $base = str_replace( '$1', '', $wgArticlePath );
+                               if ( $a && substr( $a['path'], 0, strlen( $base ) ) == $base ) {
+                                       $title = substr( $a['path'], strlen( $base ) );
+                               }
+                       } elseif ( isset( $_SERVER['ORIG_PATH_INFO'] ) && $_SERVER['ORIG_PATH_INFO'] != '' ) {
                                # Mangled PATH_INFO
                                # http://bugs.php.net/bug.php?id=31892
                                # Also reported when ini_get('cgi.fix_pathinfo')==false
-                               $_GET['title'] = $_REQUEST['title'] = substr( $_SERVER['ORIG_PATH_INFO'], 1 );
+                               $title = substr( $_SERVER['ORIG_PATH_INFO'], 1 );
                        } elseif ( isset( $_SERVER['PATH_INFO'] ) && ($_SERVER['PATH_INFO'] != '') && $wgUsePathInfo ) {
-                               $_GET['title'] = $_REQUEST['title'] = substr( $_SERVER['PATH_INFO'], 1 );
+                               $title = substr( $_SERVER['PATH_INFO'], 1 );
                        }
+                       $_GET['title'] = $_REQUEST['title'] = $title;
                }
        }