HTML/PHP中如何使用?main=参数加载不同子目录下的PHP文件
问题原因
你当前的加载逻辑会自动给main参数拼接.php后缀,当传入?main=folder/dashboard.php时,最终读取的路径是folder/dashboard.php.php,路径不存在所以加载失败。
而直接写<a href="folder/dashboard.php">是直接跳转访问独立的dashboard.php文件,没有经过home.php的框架逻辑,自然无法将内容渲染到home.php的main容器内。
修复方案
方案1:调整传参写法(无需修改后端代码)
导航链接去掉main参数值里的.php后缀即可:
<a href="?main=folder/dashboard"> Dashboard 1</a>
此时后端拼接后得到的路径为folder/dashboard.php,路径正确就可以正常加载到main容器中。
方案2:修改后端逻辑,兼容带后缀的传参
如果你希望保留传参时的.php后缀,修改home.php中的引用代码:
<div id="main" class="main"> <?php require $_GET['main']; ?> </div>
安全优化(强烈建议添加)
直接使用用户可控的$_GET['main']参数拼接路径加载文件,存在严重的路径遍历漏洞,攻击者可以构造类似?main=../../etc/passwd的参数读取服务器敏感文件,建议增加白名单校验:
<div id="main" class="main"> <?php // 配置允许加载的文件路径白名单 $allowPath = [ 'dashboard', 'folder/dashboard', 'folder/order', // 按需添加其他允许的路径 ]; $main = $_GET['main'] ?? 'dashboard'; if (in_array($main, $allowPath)) { require $main . '.php'; } else { // 路径不合法时加载404页面或默认页面 require '404.php'; } ?> </div>
内容的提问来源于stack exchange,提问作者Daniel H.
相关产品推荐
相关产品推荐

