-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.php
117 lines (113 loc) · 3.48 KB
/
index.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
<?php include './include/ini.php'; ?>
<?php
define('dir', dirname(__FILE__) . '/view/');
$rules = array(
'regular' => "(?:\G(?!\A)&|(?<dir>[^/?]+)?\/?[?])(?<key>[^=&]*)=?(?<val>[^&]*)",
'param' => "/(?'d'[^/]+)/(?'p'[^/]+)",
'query' => "/[^/]+(?:/[^/]+){2,}/?",
'dir' => "/(?'post'[\w\-]+)",
'ext' => "/(?'post').(?'t'[^/]+)",
'index' => "/"
);
$uri = rtrim(dirname($_SERVER["SCRIPT_NAME"]), '/');
$uri = '/' . trim(str_replace($uri, '', $_SERVER['REQUEST_URI']), '/');
$uri = urldecode($uri);
foreach ($rules as $action => $rule) {
if (preg_match_all('~^' . $rule . '$~i', $uri, $params)) {
// PARAMETER IS STORED IN ACTION
// TRIM URL EXTENSION
$uri = ltrim($uri, '/');
$arr = explode(".", $uri);
$uri = strtolower($arr[0]);
// INCLUDE APPROPRIATE PAGE OR TEMPLATE
switch ($action) {
case "regular":
$uri = (isset($params['dir']) && !empty($params['dir'][0])) ? $params['dir'][0] : "index";
$params = array_combine($params["key"], $params["val"]);
$params['pagename'] = $uri;
$page = dir . $uri . '.php';
if (file_exists($page)) {
includeFn($page, $params);
} else {
$params = array("pagename" => "Error");
includeFn(dir . 'error.php', $params);
}
break;
case "param":
$arr = explode("/", $uri);
$uri = $arr[0];
$param = end($arr);
$params = array("pagename" => $uri, "param" => $param);
$page = dir . $uri . '.php';
if (file_exists($page)) {
includeFn($page, $params);
} else {
$params = array("pagename" => "Error");
includeFn(dir . 'error.php', $params);
}
break;
case "query":
$arr = explode("/", $uri);
$uri = $arr[0];
$params = array("pagename" => $uri);
$key = "";
$val = "";
for ($i = 1; $i < count($arr); $i++) {
if ($i % 2 !== 0) {
$key = $arr[$i];
} else {
$val = $arr[$i];
}
$params[$key] = $val;
}
$page = dir . $uri . '.php';
if (file_exists($page)) {
includeFn($page, $params);
} else {
$params = array("pagename" => "Error");
includeFn(dir . 'error.php', $params);
}
break;
case "dir":
$params = array("pagename" => $uri);
$page = dir . $uri . '.php';
if (file_exists($page)) {
includeFn($page, $params);
}
break;
case "ext":
$uri = ltrim($uri, '/');
$arr = explode(".", $uri, 2);
$uri = $arr[0];
$pagename = $uri;
$page = dir . $uri . '.php';
if (file_exists($page)) {
includeFn($page, $params);
} else {
$params = array("pagename" => "Error");
includeFn(dir . 'error.php', $params);
}
includeFn($page, $params);
break;
case "index":
$params = array("pagename" => $action);
$page = dir . $action . '.php';
if (file_exists($page)) {
includeFn($page, $params);
} else {
$params = array("pagename" => "Error");
includeFn(dir . 'error.php', $params);
}
break;
default:
$params = array("pagename" => "Error");
includeFn(dir . 'error.php', $params);
}
// EXIT TO AVOID 404
exit();
}
}
// NOTHING IS FOUND, HANDLE 404 ERROR
$params = array("pagename" => "Error");
includeFn(dir . 'error.php', $params);
?>