PHP Routes Not Working On Published Site(Vanilla PHP)

frebpwbc  于 2023-04-28  发布在  PHP
关注(0)|答案(1)|浏览(103)

我有这个索引。php:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Title</title>
  </head>
  <body>
    <?php 

      $routes = [];

      route('/', function () {
        require_once "pages/homepage/homepage.php";
      });

      route('/gallery', function () {
        require_once "pages/gallery/gallery.php";
        echo "gallery";
      });

      route('/about_us', function () {
        require_once "pages/about_us/about_us.php";
      });

      route('/404', function () {
        require_once "pages/404/404.php";
      });

      function route(string $path, callable $callback) {
        global $routes;
        $routes[$path] = $callback;
      }

      run();

      function run() {
        global $routes;
        $uri = $_SERVER['REQUEST_URI'];
        $found = false;
        foreach ($routes as $path => $callback) {
          if ($path !== $uri) continue;

          $found = true;
          $callback();
        }

        if (!$found) {
          $notFoundCallback = $routes['/404'];
          $notFoundCallback();
        }
      }
      ?>
  </body>
</html>

注意:项目需要vanilla PHP。

我的问题是路由。当我在localhost ex上运行它时,它工作得很好:localhost:3000/gallery等但在已发布的站点上运行时返回404错误,例如: www.example.com 是PHP中正确的路由方式吗?

mwkjh3gx

mwkjh3gx1#

这种方法通常适用于小型网站和应用程序。如果它有增长的趋势,我建议考虑使用像Laravel这样的框架。
但对于你的问题,我的猜测是你缺乏一个。htaccess文件。您需要告诉服务器,无论站点访问者试图获取的URL是什么,它都应该尝试并运行index。php,而不是其他文件。
查看this线程
此外,第二件要尝试的事情是附加 www.example.com 忙但即使它这样做,你仍然需要一个htaccess文件来删除。php文件。良好安全的做法

相关问题