WordPress.org

Make WordPress Core

Changeset 3111


Ignore:
Timestamp:
11/16/2005 10:54:52 PM (15 years ago)
Author:
ryan
Message:

More 404 work. Hopefully fixes #1471

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/wp-includes/classes.php

    r3108 r3111  
    14131413
    14141414        // Process PATH_INFO, REQUEST_URI, and 404 for permalinks.
    1415         if ((isset($_GET['error']) && $_GET['error'] == '404') ||
    1416                 ((! empty($_SERVER['PATH_INFO'])) &&
    1417                  ('/' != $_SERVER['PATH_INFO']) &&
    1418                  (false === strpos($_SERVER['PATH_INFO'], '.php'))
    1419                  ) ||
    1420                 (false === strpos($_SERVER['REQUEST_URI'], '.php'))
    1421                 ) {
    1422 
    1423             $this->did_permalink = true;
    1424 
     1415
     1416        // Fetch the rewrite rules.
     1417        $rewrite = $wp_rewrite->wp_rewrite_rules();
     1418
     1419        if (! empty($rewrite)) {
    14251420            // If we match a rewrite rule, this will be cleared.
    14261421            $error = '404';
    1427 
    1428             // Fetch the rewrite rules.
    1429             $rewrite = $wp_rewrite->wp_rewrite_rules();
    1430 
    1431             if (! empty($rewrite)) {
    1432                 $pathinfo = $_SERVER['PATH_INFO'];
    1433                 $pathinfo_array = explode('?', $pathinfo);
    1434                 $pathinfo = $pathinfo_array[0];
    1435                 $req_uri = $_SERVER['REQUEST_URI'];
    1436                 $req_uri_array = explode('?', $req_uri);
    1437                 $req_uri = $req_uri_array[0];
    1438                 $home_path = parse_url(get_settings('home'));
    1439                 $home_path = $home_path['path'];
    1440 
    1441                 // Trim path info from the end and the leading home path from the
    1442                 // front.  For path info requests, this leaves us with the requesting
    1443                 // filename, if any.  For 404 requests, this leaves us with the
    1444                 // requested permalink.
    1445                 $req_uri = str_replace($pathinfo, '', $req_uri);
    1446                 $req_uri = str_replace($home_path, '', $req_uri);
    1447                 $req_uri = trim($req_uri, '/');
    1448                 $pathinfo = trim($pathinfo, '/');
    1449 
    1450                 // The requested permalink is in $pathinfo for path info requests and
    1451                 //  $req_uri for other requests.
    1452                 if (! empty($pathinfo) && ($wp_rewrite->index != $pathinfo)) {
    1453                     $request = $pathinfo;
    1454                 } else {
    1455                     $request = $req_uri;
    1456                 }
    1457 
    1458                 // Look for matches.
    1459                 $request_match = $request;
    1460                 foreach ($rewrite as $match => $query) {
    1461                     // If the requesting file is the anchor of the match, prepend it
    1462                     // to the path info.
    1463                     if ((! empty($req_uri)) && (strpos($match, $req_uri) === 0) && ($req_uri != $request)) {
    1464                         $request_match = $req_uri . '/' . $request;
    1465                     }
    1466 
    1467                     if (preg_match("!^$match!", $request_match, $matches)) {
    1468                         // Got a match.
    1469                         // Trim the query of everything up to the '?'.
    1470                         $query = preg_replace("!^.+\?!", '', $query);
    1471 
    1472                         // Substitute the substring matches into the query.
    1473                         eval("\$query = \"$query\";");
    1474 
    1475                         // Parse the query.
    1476                         parse_str($query, $query_vars);
    1477 
    1478                         // If we're processing a 404 request, clear the error var
    1479                         // since we found something.
    1480                         if (isset($_GET['error'])) {
    1481                             unset($_GET['error']);
    1482                         }
    1483 
    1484                         if (isset($error)) {
    1485                             unset($error);
    1486                         }
    1487 
    1488                         break;
    1489                     }
    1490                 }
    1491 
    1492                 // If req_uri is empty, the home page was requested.  Unset error.
    1493                 if ( empty($req_uri) ) {
     1422            $this->did_permalink = true;
     1423
     1424            $pathinfo = $_SERVER['PATH_INFO'];
     1425            $pathinfo_array = explode('?', $pathinfo);
     1426            $pathinfo = $pathinfo_array[0];
     1427            $req_uri = $_SERVER['REQUEST_URI'];
     1428            $req_uri_array = explode('?', $req_uri);
     1429            $req_uri = $req_uri_array[0];
     1430            $self = $_SERVER['PHP_SELF'];
     1431            $home_path = parse_url(get_settings('home'));
     1432            $home_path = $home_path['path'];
     1433
     1434            // Trim path info from the end and the leading home path from the
     1435            // front.  For path info requests, this leaves us with the requesting
     1436            // filename, if any.  For 404 requests, this leaves us with the
     1437            // requested permalink.
     1438            $req_uri = str_replace($pathinfo, '', $req_uri);
     1439            $req_uri = str_replace($home_path, '', $req_uri);
     1440            $req_uri = trim($req_uri, '/');
     1441            $pathinfo = trim($pathinfo, '/');
     1442            $self = str_replace($home_path, '', $self);
     1443            $self = trim($self, '/');
     1444
     1445            // The requested permalink is in $pathinfo for path info requests and
     1446            //  $req_uri for other requests.
     1447            if (! empty($pathinfo) && ($wp_rewrite->index != $pathinfo)) {
     1448                $request = $pathinfo;
     1449            } else {
     1450                $request = $req_uri;
     1451            }
     1452
     1453            // Look for matches.
     1454            $request_match = $request;
     1455            foreach ($rewrite as $match => $query) {
     1456                // If the requesting file is the anchor of the match, prepend it
     1457                // to the path info.
     1458                if ((! empty($req_uri)) && (strpos($match, $req_uri) === 0) && ($req_uri != $request)) {
     1459                    $request_match = $req_uri . '/' . $request;
     1460                }
     1461
     1462                if (preg_match("!^$match!", $request_match, $matches)) {
     1463                    // Got a match.
     1464                    // Trim the query of everything up to the '?'.
     1465                    $query = preg_replace("!^.+\?!", '', $query);
     1466
     1467                    // Substitute the substring matches into the query.
     1468                    eval("\$query = \"$query\";");
     1469
     1470                    // Parse the query.
     1471                    parse_str($query, $query_vars);
     1472
     1473                    // If we're processing a 404 request, clear the error var
     1474                    // since we found something.
    14941475                    if (isset($_GET['error'])) {
    14951476                        unset($_GET['error']);
     
    14991480                        unset($error);
    15001481                    }
     1482
     1483                    break;
     1484                }
     1485            }
     1486
     1487            // If req_uri is empty or if it is a request for ourself, unset error.
     1488            if ( empty($request) || $req_uri == $self ) {
     1489                if (isset($_GET['error'])) {
     1490                    unset($_GET['error']);
     1491                }
     1492
     1493                if (isset($error)) {
     1494                    unset($error);
    15011495                }
    15021496            }
Note: See TracChangeset for help on using the changeset viewer.