먼저 index.php, router.php, .htaccess 파일을 생성합니다.
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php [L,QSA]
이 코드는 사용자가 router.php에 직접 액세스하기 위한 URL을 입력하는 경우 404 응답을 표시합니다.
<?php if (basename($_SERVER['PHP_SELF']) == basename(__FILE__)) { http_response_code(404); die(); }
class Page { protected static bool $Return_404 = true; }
404 페이지를 반환하기 위한 정적 부울 변수를 만듭니다. 기본값으로 true로 설정하겠습니다.
이제 404페이지에 대한 기능을 추가하겠습니다.
protected static function Return_404(): void { (file_exists("./Pages/404.php")) ? require_once "./Pages/404.php" : http_response_code(404); }
여기서는 Pages 폴더 안에 404페이지를 넣어두었습니다. 원하는 폴더에 넣으시면 됩니다.
'파일' 기능도 추가할 예정입니다.
protected static function File(string $file): string { if (!empty($file)) { (str_contains($file, "?")) ? $file = strtok($file, '?') : $file; ($file[strlen($file) - 1] === "/") ? $file = rtrim($file, "/") : $file; } return $file; }
이 함수는 요청 URL에 쿼리 문자열이 포함되어 있거나 "/"로 끝나는지 확인하고 이를 제거합니다.
"Strok" 문자열 함수를 사용하여 "?" 앞의 문자열 값을 가져옵니다. 나는 "스트로크"가 이와 같이 사용되도록 의도된 것이 아니라는 것을 알고 있지만 작동하며 불필요하게 복잡한 알고리즘을 수행하지 않아도 됩니다. "rtrim" 문자열 함수를 사용하여 "/"가 문자열의 마지막에 포함된 경우 이를 제거합니다.
class Routes { public static array $Route = array( "" => "Pages/home.php", "/about" => "Pages/about.php", ); }
여기에서는 라우팅을 저장하기 위한 정적 배열을 만듭니다.
이 배열에는 "요청된 URL" => "파일 위치".
모든 페이지 파일을 Pages 폴더에 넣었습니다. 원하는 곳에 놓을 수 있습니다.
Router 클래스는 위에서 이미 생성한 Page 클래스에서 확장됩니다.
"" => "Pages/home.php"는 홈 페이지용입니다.
class Router extends Page { }
이제 요청한 파일이 Router 클래스에 존재하는지 확인하는 함수를 작성해보겠습니다.
public static function Run(): void { $requested_file = self::File($_SERVER["REQUEST_URI"]); foreach (Routes::$Route as $request => $file) { if ($requested_file === $request) { if (file_exists($file)) { self::$Return_404 = false; require $file; } else echo "Error"; } } if (self::$Return_404) self::Return_404(); }
이 함수는 요청한 파일이 $Route 배열에 있는지 먼저 확인합니다. 존재하는 경우 정적 부울 $Return_404가 false로 설정되어 404 페이지가 표시되지 않고 페이지 파일을 가져오지 않습니다. 존재하지 않는 경우 404 페이지가 반환됩니다.
파일이 존재하지만 Pages 폴더에 파일이 없으면 함수는 "오류"를 표시합니다. 여기서 echo "Error" 대신 404 페이지를 표시할 수 있습니다.
<?php if (basename($_SERVER['PHP_SELF']) == basename(__FILE__)) { http_response_code(404); die(); } class Page { protected static bool $Return_404 = true; protected static function Return_404(): void { (file_exists("./Pages/404.php")) ? require_once "./Pages/404.php" : http_response_code(404); } protected static function File(string $file): string { if (!empty($file)) { (str_contains($file, "?")) ? $file = strtok($file, '?') : $file; ($file[strlen($file) - 1] === "/") ? $file = rtrim($file, "/") : $file; } return $file; } } class Router extends Page { public static function Run(): void { $requested_file = self::File($_SERVER["REQUEST_URI"]); foreach (Routes::$Route as $request => $file) { if ($requested_file === $request) { if (file_exists($file)) { self::$Return_404 = false; require $file; } else echo "Error"; } } if (self::$Return_404) self::Return_404(); } } class Routes { public static array $Route = array( "" => "Pages/home.php", "/about" => "Pages/about.php", ); }
index.php에서 Router 클래스의 "Run" 기능을 사용하겠습니다.
<!DOCTYPE html> <html lang="en"> <?php require_once "./router.php"; ?> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Router</title> </head> <body> <?php Router::Run(); ?> </body> </html>
페이지의 모든 HTML 코드는 'body' 태그에 포함됩니다.
마지막으로 Pages 폴더에 home.php, about.php, 404.php를 생성합니다.
home.php
<h1>Home page</h1>
about.php
<h1>about page</h1>
404.php
<h1>404 page</h1>
코드가 "xampp" 또는 "PHP 서버" 확장명으로 작동하는지 확인하세요.
오류가 발생하면 언제든지 알려주세요. XD
다음에서 Github 저장소를 확인할 수도 있습니다.
위 내용은 PHP로 간단한 페이지 라우터 만들기의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!