cvs: docweb /www redirect.php
| From: | Etienne Kneuss | Date: | Tue, 05 Dec 2006 17:50:20 +0000 |
| Subject: | cvs: docweb /www redirect.php | ||
| Groups: | php.doc.web | ||
| Request: | Send a blank email to doc-web+get-904@lists.php.net to get a copy of this message | ||
colder Tue Dec 5 17:50:20 2006 UTC
Modified files:
/docweb/www redirect.php
Log:
Cleans the path parsing
Require a valid mime type
http://cvs.php.net/viewvc.cgi/docweb/www/redirect.php?r1=1.9&r2=1.10&diff_format=u
Index: docweb/www/redirect.php
diff -u docweb/www/redirect.php:1.9 docweb/www/redirect.php:1.10
--- docweb/www/redirect.php:1.9 Sun Jul 31 13:57:02 2005
+++ docweb/www/redirect.php Tue Dec 5 17:50:20 2006
@@ -15,7 +15,7 @@
+----------------------------------------------------------------------+
| Authors: Sean Coates <sean@php.net> |
+----------------------------------------------------------------------+
-$Id: redirect.php,v 1.9 2005/07/31 13:57:02 vincent Exp $
+$Id: redirect.php,v 1.10 2006/12/05 17:50:20 colder Exp $
*/
require_once('../include/lib_proj_lang.inc.php');
@@ -42,17 +42,19 @@
$filename = preg_replace('/\?.*$/', '', $part);
// remove webroot-escape attempts
- $filename = str_replace(array('..', '//'), array('',
'/'), $filename);
+ $filename = str_replace('..', '', $filename);
- // fake DirectoryIndex
- if (substr($filename, -1) == '/' || $filename == '') {
- $filename .= 'index.php';
- }
+ // remove obsolete slashes
+ $filename = preg_replace('#/{2,}#', '/', $filename);
+
+ // strip ending slashes
+ $filename = rtrim($filename, '/');
- $filename = "./$filename";
+ $filename = './'.$filename;
- if (is_dir($filename))
- return "$filename/index.php";
+ if (is_dir($filename)) {
+ return $filename.'/index.php';
+ }
return $filename;
}
@@ -103,24 +105,31 @@
// If it's a PHP file include it, otherwise pass it through
if (substr($uri, -4) == '.php') {
require($uri);
+ return;
} else {
- // get the file mime type
+ // the file can't be a directory nor a php file
+ // Validate the mime type
+ $mime = false;
foreach ($mime_types as $ext => $type) {
- if (substr($uri, -strlen(ext)) == $ext) {
+
+ if (substr($uri, -strlen($ext)) == $ext) {
$mime = $type;
break;
}
- }
- header("Content-Type: $mime");
- readfile($uri);
+ }
+ if ($mime !== false) {
+ header("Content-Type: $mime");
+ readfile($uri);
+ return;
+ }
}
-} else {
- // no resource found:
- header($_SERVER['SERVER_PROTOCOL']." 404 Not Found");
- $_SERVER["REDIRECT_STATUS"] = '404';
- $uri = '/';
- require('error.php');
}
+// script has not exited yet, an error must have occured, display 404.
+// no resource found:
+header($_SERVER['SERVER_PROTOCOL']." 404 Not Found");
+$_SERVER["REDIRECT_STATUS"] = '404';
+$uri = '/';
+require('error.php');
?>