mirror of
https://github.com/php/web-php.git
synced 2026-03-24 07:12:16 +01:00
was removed in PHP 5 Beta 2 - Remove the text file and add BC URL redirector for this file - Modify links on the frontpage to utilize mirrors (now the files should be available on all mirrors), and also point to the PHP file
261 lines
9.6 KiB
PHP
261 lines
9.6 KiB
PHP
<?php
|
|
|
|
// $Id$
|
|
|
|
/*
|
|
|
|
This script handles all 401, 403 and 404 error redirects,
|
|
and some directory requests (like /images). Uses the
|
|
preferred language setting and the REQUEST_URI to guess what
|
|
page should be displayed. In case there is no page that can
|
|
be displayed, the user is redirected to a search page.
|
|
|
|
*/
|
|
|
|
// Ensure that our environment is set up
|
|
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/prepend.inc';
|
|
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/loadavg.inc';
|
|
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/errors.inc';
|
|
|
|
// Get URI for this request (without the leading slash, and
|
|
// without any query string attached)
|
|
// See langchooser.inc for more info on STRIPPED_URI
|
|
// Also decode special URL parts, eg %20 into a space
|
|
$URI = substr($_SERVER['STRIPPED_URI'], 1);
|
|
$URI = urldecode(preg_replace("!(\\?.*$)!", "", $URI));
|
|
|
|
// ============================================================================
|
|
// For images, display a 404 automatically (no redirect)
|
|
if (preg_match("!\\.(pdf|gif|jpg|png)$!i", $URI)) { error_404(); }
|
|
|
|
// ============================================================================
|
|
// BC: handle .php3 files that were renamed to .php
|
|
if (preg_match("!(.*\\.php)3$!", $URI, $array)) {
|
|
mirror_redirect("/$array[1]");
|
|
}
|
|
|
|
// ============================================================================
|
|
// BC: handle bugs.php moved completely to bugs.php.net
|
|
if (preg_match("!^bugs.php?(.+)$!", $URI, $array)) {
|
|
mirror_redirect("http://bugs.php.net/?$array[1]");
|
|
}
|
|
|
|
// ============================================================================
|
|
// BC: handle moving english manual down into its own directory (also supports
|
|
// default language manual accessibilty on mirror sites through /manual/filename)
|
|
if (preg_match("!^manual(/[^/]*)$!", $URI, $array)) {
|
|
mirror_redirect("/manual/$LANG$array[1]");
|
|
} elseif (preg_match("!^manual/html/([^/]+)$!", $URI, $array)) {
|
|
$array[1] = preg_replace("!.html$!", ".php", $array[1]);
|
|
mirror_redirect("/manual/$LANG/print/$array[1]");
|
|
}
|
|
|
|
// ============================================================================
|
|
// Printer friendly manual page handling. It's important that this is included,
|
|
// and not redirected, as this way all relative URL's will retain their meaning
|
|
// and point to pages relative to the print dir (which is nonexistent)
|
|
// We need to override the 404 status in these cases too.
|
|
if (preg_match("!^manual/(\\w+)/(print|printwn|tableless)/(.+\\.php)$!", $URI, $parts) &&
|
|
@file_exists($_SERVER['DOCUMENT_ROOT'] . "/manual/$parts[1]/$parts[3]")) {
|
|
status_header(200);
|
|
if (in_array($parts[2], array('print', 'printwn'))) {
|
|
$PRINT_PAGE = TRUE;
|
|
if ($parts[2] == "printwn") { $PRINT_NOTES = TRUE; }
|
|
} else {
|
|
$NOTABLES = TRUE;
|
|
}
|
|
include $_SERVER['DOCUMENT_ROOT'] . "/manual/$parts[1]/$parts[3]";
|
|
exit;
|
|
}
|
|
|
|
// BC: for old HTML directory (.html extension was used in that)
|
|
elseif (preg_match("!^manual/(\\w+)/html/(.+)\\.(html|php)$!", $URI, $parts) &&
|
|
@file_exists($_SERVER['DOCUMENT_ROOT'] . "/manual/$parts[1]/$parts[2].php")) {
|
|
status_header(200);
|
|
$PRINT_PAGE = TRUE;
|
|
include $_SERVER['DOCUMENT_ROOT'] . "/manual/$parts[1]/$parts[2].php";
|
|
exit;
|
|
}
|
|
|
|
// The index file needs to be handled in a special way
|
|
elseif (preg_match("!^manual/(\\w+)/(print|printwn|html|tableless)(/)?$!", $URI, $parts) &&
|
|
@file_exists($_SERVER['DOCUMENT_ROOT'] . "/manual/$parts[1]/index.php")) {
|
|
status_header(200);
|
|
if (in_array($parts[2], array('print', 'printwn', 'html'))) {
|
|
$PRINT_PAGE = TRUE;
|
|
if ($parts[2] == "printwn") { $PRINT_NOTES = TRUE; }
|
|
} else {
|
|
$NOTABLE = TRUE;
|
|
}
|
|
include $_SERVER['DOCUMENT_ROOT'] . "/manual/$parts[1]/index.php";
|
|
exit;
|
|
}
|
|
|
|
// ============================================================================
|
|
// Some nice URLs for getting something for download
|
|
if (preg_match("!^get/([^/]+)$!", $URI, $what)) {
|
|
switch ($what[1]) {
|
|
case "php" : $URI = "downloads"; break;
|
|
case "docs" : // intentional
|
|
case "documentation" : $URI = "download-docs"; break;
|
|
case "dochowto" : // intentional
|
|
case "phpdochowto" : $URI = "getdochowto"; break;
|
|
}
|
|
}
|
|
|
|
|
|
// ============================================================================
|
|
// Nice URLs for download files, so wget works completely well with download links
|
|
if (preg_match("!^get/([^/]+)/from/([^/]+)(/mirror)?$!", $URI, $dlinfo)) {
|
|
|
|
$df = $dlinfo[1];
|
|
|
|
// Mirror selection page
|
|
if ($dlinfo[2] == "a") {
|
|
status_header(200);
|
|
include_once $_SERVER['DOCUMENT_ROOT'] . "/include/get-download.inc";
|
|
exit;
|
|
}
|
|
|
|
// The same mirror is selected
|
|
if ($dlinfo[2] == "this") { $mr = $MYSITE; }
|
|
|
|
// Some other mirror is selected
|
|
else { $mr = "http://{$dlinfo[2]}/"; }
|
|
|
|
// Start the download process
|
|
status_header(200);
|
|
include $_SERVER['DOCUMENT_ROOT'] . "/include/do-download.inc";
|
|
download_file($mr, $df);
|
|
exit;
|
|
}
|
|
|
|
// Work with lowercased URI from now
|
|
$URI = strtolower($URI);
|
|
|
|
// ============================================================================
|
|
// Define shortcuts for PHP files, manual pages and external redirects
|
|
$uri_aliases = array (
|
|
|
|
# PHP page shortcuts
|
|
"download" => "downloads",
|
|
"getphp" => "downloads",
|
|
"getdocs" => "download-docs",
|
|
"documentation" => "docs",
|
|
"mailinglists" => "mailing-lists",
|
|
"mailinglist" => "mailing-lists",
|
|
"changelog" => "ChangeLog-4",
|
|
"gethelp" => "support",
|
|
"help" => "support",
|
|
"unsubscribe" => "unsub",
|
|
"subscribe" => "mailing-lists",
|
|
"logos" => "download-logos",
|
|
|
|
# manual shortcuts
|
|
"ini" => "configuration",
|
|
|
|
"install" => "installation",
|
|
|
|
"intro" => "introduction",
|
|
"whatis" => "introduction",
|
|
"whatisphp" => "introduction",
|
|
"what_is_php" => "introduction",
|
|
|
|
"windows" => "install.windows",
|
|
"win32" => "install.windows",
|
|
|
|
"globals" => "language.variables.predefined",
|
|
"register_globals" => "security.registerglobals",
|
|
"registerglobals" => "security.registerglobals",
|
|
"gd" => "image",
|
|
|
|
"tut" => "tutorial",
|
|
"tut.php" => "tutorial", // BC
|
|
|
|
"faq.php" => "faq", // BC
|
|
"bugs.php" => "bugs", // BC
|
|
"bugstats.php" => "bugstats", // BC
|
|
|
|
"icap" => "mcal", // mcal is the successor of icap
|
|
|
|
"news.php" => "news-2003", // BC
|
|
"README.mirror" => "mirroring", // BC
|
|
"ZEND_CHANGES.txt" => "zend-engine-2.php", // BC
|
|
"zend2_example.phps" => "zend-engine-2.php", // BC
|
|
"ZEND_CHANGES_PHP_5_0_0b2.txt" => "zend-engine-2.php", // BC
|
|
|
|
"manual/about-notes.php" => "manual/add-note", // BC
|
|
|
|
# external shortcut aliases ;)
|
|
"dochowto" => "phpdochowto",
|
|
"projects.php" => "projects", // BC
|
|
);
|
|
|
|
$external_redirects = array(
|
|
"php4news" => "http://cvs.php.net/cvs.php/php-src/NEWS?onb=1.1247.2",
|
|
"php5news" => "http://cvs.php.net/co.php/php-src/NEWS?p=1",
|
|
"projects" => "http://freshmeat.net/browse/183/",
|
|
"pear" => "http://pear.php.net/",
|
|
"bugs" => "http://bugs.php.net/",
|
|
"bugstats" => "http://bugs.php.net/bugstats.php",
|
|
"phpdochowto" => "/manual/howto/index.html",
|
|
"getdochowto" => "http://cvs.php.net/co.php/phpdoc/howto/howto.html.tar.gz?p=1",
|
|
"rev" => "/manual/$LANG/revcheck.html.gz",
|
|
"blog" => "/manual/$LANG/build.log.gz",
|
|
);
|
|
|
|
// ============================================================================
|
|
// "Rewrite" the URL, if it was a shortcut
|
|
if (isset($uri_aliases[$URI])) {
|
|
$URI = $uri_aliases[$URI];
|
|
}
|
|
|
|
// ============================================================================
|
|
// Redirect if the entered URI was a PHP page name (except the books page,
|
|
// which we display in the mirror's language or the explicitly specified
|
|
// language [see below])
|
|
if (!in_array($URI, array('books', 'mirror-info', 'error')) &&
|
|
file_exists($_SERVER['DOCUMENT_ROOT'] . "/$URI.php")) {
|
|
mirror_redirect("/$URI.php");
|
|
}
|
|
|
|
// ============================================================================
|
|
// Execute external redirect if a rule exists for the URI
|
|
if (isset($external_redirects[$URI])) {
|
|
mirror_redirect($external_redirects[$URI]);
|
|
}
|
|
|
|
// Temporary hack for books and mirror-info, until all the pages
|
|
// will be capable of being included from anywhere
|
|
if (in_array($URI, array('books', 'mirror-info'))) {
|
|
status_header(200);
|
|
include_once $_SERVER['DOCUMENT_ROOT'] . "/$URI.php";
|
|
}
|
|
|
|
// ============================================================================
|
|
// Try to find the page using the preferred language as a manual page
|
|
include_once $_SERVER['DOCUMENT_ROOT'] . "/include/manual-lookup.inc";
|
|
$try = find_manual_page($LANG, $URI);
|
|
if ($try) {
|
|
status_header(200);
|
|
include_once $_SERVER['DOCUMENT_ROOT'] . $try;
|
|
exit;
|
|
}
|
|
|
|
// ============================================================================
|
|
// 404 page for manual pages (eg. not built language)
|
|
if (strpos($URI, "manual/") === 0) {
|
|
error_404_manual();
|
|
}
|
|
|
|
// ============================================================================
|
|
// If no match was found till this point, the last action is to start a
|
|
// search with the URI the user typed in
|
|
$fallback = (myphpnet_urlsearch() === MYPHPNET_URL_MANUAL ? "manual" : "quickref");
|
|
mirror_redirect(
|
|
'/search.php?show=' . $fallback . '&lang=' . urlencode($LANG) .
|
|
'&pattern=' . urlencode(substr($_SERVER['REQUEST_URI'], 1))
|
|
);
|
|
|
|
?>
|