正如另一位用户在另一个问题中建议我的那样,一种高级方法是使用
.htaccess 文件中的 FallbackResource 或 RewriteRule 以通过根目录中的单个 index.php 文件处理所有 URL,然后解析 $_SERVER['REQUEST_URI'] 以确定要加载的代码和服务的响应。
然后include './includes/globals.php';
我只在 index.php 上设置常量,而不是将它添加到站点的每个文件中,这可能是一个漫长的过程。
我尝试这样做,并且路由部分似乎工作得很好。不幸的是,globals.php
我在 on 上定义的常量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
文件(路由文件):
<?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";
}
}
?>