如何解决PHP:重定向到子级应用程序页面 (index.php) 时保留以前包含的文件
我以一种模块化的方式重建了我的网站。
对于我自己编写的网络应用程序,我有一个子文件夹结构。
现在我在顶层的中央入口点有管理不同 URL 的路由。
重定向到子级 index.php 页面效果很好。
由于我在子目录中的网络应用程序有自己的 index.php 页面,当从顶级 index.php 页面重定向到它们时,我在顶级站点上的包含文件消失了。
当然,如果我只包含来自子级应用程序的各个页面/视图,则顶级包含会保留。但是,子级 index.php 文件中的所有逻辑都没有使用,子级应用程序不能再被视为独立的。
所以我的问题是: 将 (header("location: ...")) 重定向到子级应用程序 index.php 时,是否可以将包含的内容保留在我的顶级 index.php 页面上?
这是我的文件夹结构: Folder structure
这是我的顶级index.php代码:
<?php
const DS = DIRECTORY_SEPARATOR;
define("PATH",$_SERVER["DOCUMENT_ROOT"] . DS);
require_once PATH . "config.php";
include_once "Route.php";
include_once PATH_VIEWS . "header.php";
include_once PATH_VIEWS . "banner.php";
if($_SESSION["loggedIn"]) include_once PATH_VIEWS . "menu.php";
// Routes
Route::add("/",function(){
// Check Session
if(!$_SESSION["loggedIn"]){
// Goal: Redirect to module / sub site "sso" while keeping
// the included header.php and banner.php
header("location:/login");
exit();
}
include PATH_VIEWS . "welcome.php";
});
Route::add("/login",function(){
header("location: /apps/sso/");
exit();
});
Route::run();
解决方法
您应该创建一个管理所有 url 请求的控制器页面, 为此,您需要创建一个 htaccess 规则来将所有请求导航到此文件
正如这里提到的 CD001:https://stackoverflow.com/a/18406686/14648190
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ /index.php [L,QSA]
例如,如果请求的文件不存在,此代码将所有请求导航到根 index.php。
这允许您控制请求 url 时发生的情况。 在此文件中,您可以选择要导入的内容以及何时导入哪个 url
例如:
index.php:
<?php
//here you can include whatever you want to be included in any url
if ($_SERVER['REQUEST_URI'] == '/login') {
require_once 'login.php'; // as an example
} /*else if (url == any other url) {
require again what you want to be required in this url
}*/
?>
通过这种方式,您可以控制在您网站的任何页面中包含的内容,而不是在每个页面中再次要求。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。