Rumah > Soal Jawab > teks badan
Saya tahu anda boleh menambah peraturan dalam htaccess, tetapi saya mendapati bahawa rangka kerja PHP tidak melakukannya dan entah bagaimana anda masih mempunyai URL yang cantik. Bagaimanakah pelayan boleh melakukan ini jika mereka tidak mengetahui peraturan URL?
Saya telah mencari kelas pengurus url Yii, tetapi saya tidak faham bagaimana ia dilakukan.
P粉8019040892023-10-31 08:17:16
Ini biasanya dilakukan dengan menghalakan semua permintaan ke satu titik masuk (fail yang melaksanakan kod berbeza bergantung pada permintaan), dengan peraturan berikut:
# Redirect everything that doesn't match a directory or file to index.php RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule .* index.php [L]
Fail kemudian membandingkan permintaan ($_SERVER["REQUEST_URI"]
) dengan senarai laluan - corak yang sepadan dengan permintaan, memetakan laluan pelaksanaan kepada tindakan pengawal (dalam aplikasi MVC) atau tindakan lain. Rangka kerja selalunya termasuk laluan yang boleh membuat kesimpulan pengawal dan tindakan daripada permintaan itu sendiri, sebagai laluan sandaran.
Contoh mudah:
<?php // Define a couple of simple actions class Home { public function GET() { return 'Homepage'; } } class About { public function GET() { return 'About page'; } } // Mapping of request pattern (URL) to action classes (above) $routes = array( '/' => 'Home', '/about' => 'About' ); // Match the request to a route (find the first matching URL in routes) $request = '/' . trim($_SERVER['REQUEST_URI'], '/'); $route = null; foreach ($routes as $pattern => $class) { if ($pattern == $request) { $route = $class; break; } } // If no route matched, or class for route not found (404) if (is_null($route) || !class_exists($route)) { header('HTTP/1.1 404 Not Found'); echo 'Page not found'; exit(1); } // If method not found in action class, send a 405 (e.g. Home::POST()) if (!method_exists($route, $_SERVER["REQUEST_METHOD"])) { header('HTTP/1.1 405 Method not allowed'); echo 'Method not allowed'; exit(1); } // Otherwise, return the result of the action $action = new $route; $result = call_user_func(array($action, $_SERVER["REQUEST_METHOD"])); echo $result;
Digabungkan dengan konfigurasi pertama, ini adalah skrip mudah yang membolehkan anda menggunakan URL seperti domain.com/about
. Harap ini membantu anda memahami perkara yang berlaku di sini.