使用index.php进行路由,其中​​我定义了常量

时间:2013-05-27 23:13:53

标签: php routing include constants

正如另一位用户在另一个问题中建议的那样,一种先进的方法是使用

  .htaccess文件中的FallbackResource或RewriteRule通过root中的单个index.php文件处理所有URL,然后解析$ _SERVER ['REQUEST_URI']以确定要加载哪些代码以及要服务的响应。< / p>

然后include './includes/globals.php';我只在index.php上设置常量,而不是将其添加到站点的每个文件中,这可能是一个很长的过程。

我试图这样做,并且路由部分似乎工作得很好。 不幸的是,我在globals.php上定义的常量(我index.php中包含的常量)仅在index.php上定义,而不是在其他脚本上定义。

错误在哪里?如何解决这个问题以及任何类型的建议都非常感谢!

谢谢

.htaccess文件:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]

globals.php

<?php
       define('ROOT', __DIR__)
?>

index.php FILE(路由文件):

<?php
include 'globals.php';

$uri = $_SERVER["REQUEST_URI"];
$trimmeduri = trim($uri, '/');

if($uri == '/'){
    $sigle = $link->query("SELECT sigla AS lingue FROM LINGUE");

    while($lingue_db = mysqli_fetch_array($sigle)){
        $lingue[] = $lingue_db['lingue'];
    }

    $client_lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);

    if(in_array($client_lang, $lingue)){
        header("location: http://www.mysite.com/$client_lang/index.php");
    }else{
        header("location: http://www.mysite.com/it/index.php");
    }

}else{
    include "sql.php";
    $link = new mysqli($host, $user, $pw, $db);
    $link->set_charset('UTF8');
    $trimmeduri = $link->real_escape_string($trimmeduri);
    $urlliste = $link->query("SELECT Nome FROM LISTE WHERE URL = '$trimmeduri'");
    while($urllista = mysqli_fetch_array($urlliste)){
        $lista = $urllista['Nome'];
    }
    $uri_count = mysqli_num_rows($urlliste);
    $urlliste->close();

    if($uri_count == '1'){
        header("location: http://www.mysite.com/pages/page.php?name=$lista");
    }elseif($uri_count > '1'){
        header('HTTP/1.0 400 Bad Request', true, 400);
        require_once "errors/400badrequest.html";
    }else{
        header("HTTP/1.0 404 Not Found");
        require_once "errors/404notfound.php";
    }
}
?>

1 个答案:

答案 0 :(得分:1)

不确定如何定义globals.php文件,但您可能需要考虑自动加载。见http://php.net/manual/en/function.spl-autoload-register.php

事实上,如果我是你,我会自动加载我的所有课程,从长远来看,让生活更轻松。也就是说,假设所包含的文件是类。