MySQL数据库驱动导航菜单链接叠加问题求助
解决导航菜单链接路径叠加的问题
这问题我之前帮同事排查过一模一样的情况!核心原因很简单:你用了相对路径来写导航链接,而不是绝对路径。浏览器解析相对路径的时候,会基于当前页面的URL去拼接新地址,所以点完第一个链接后,当前路径变成了/root/as/slider1.php/1/Real%20Estate,再点第二个链接,就会在这个路径后面加上slider1.php/2/Cars,自然就出现叠加的诡异URL了。
给你几个靠谱的解决方案:
- 直接使用根目录开头的绝对路径:把所有导航链接的开头加上斜杠,比如原来的
slider1.php/1/Real%20Estate改成/root/as/slider1.php/1/Real%20Estate。这样不管当前页面在哪个路径下,浏览器都会从网站的根目录开始定位资源,彻底避免路径叠加。 - 用PHP动态生成根路径(更灵活):如果你的项目后期可能会更改目录结构,可以在项目的配置文件里定义一个基础路径常量:
然后生成导航链接的时候这样写:define('BASE_PATH', '/root/as/');
后期改目录只需要修改echo '<a href="' . BASE_PATH . 'slider1.php/' . $item_id . '/' . urlencode($category_name) . '">' . $category_name . '</a>';BASE_PATH的值就行,不用一个个改链接。 - 检查导航生成逻辑:看看你从数据库取数据生成链接的代码,是不是不小心用了
$_SERVER['REQUEST_URI']或者当前页面的路径来拼接新链接?如果是,赶紧改成基于根目录的路径写法。
举个错误写法和正确写法的对比:
错误的相对路径写法(导致叠加):
foreach($menu_items as $item) { echo '<a href="slider1.php/' . $item['id'] . '/' . $item['category'] . '">' . $item['category'] . '</a>'; }
正确的绝对路径写法:
foreach($menu_items as $item) { echo '<a href="/root/as/slider1.php/' . $item['id'] . '/' . urlencode($item['category']) . '">' . $item['category'] . '</a>'; }
另外提个小细节:记得用urlencode()处理分类名称(比如Real Estate),虽然浏览器会自动转义,但手动处理能避免一些特殊字符导致的路径问题。
内容的提问来源于stack exchange,提问作者dipak dutta
相关产品推荐
相关产品推荐

