PHP控制器搭建求助:无.php后缀URL访问报错
问题解决方法
1. 配置URL重写(核心原因)
服务器默认仅识别带.php后缀的文件,直接访问/about这类无后缀路径会提示找不到资源。需要配置重写规则,让服务器将干净路径映射到对应的PHP文件:
针对Apache服务器
在网站根目录创建.htaccess文件,添加以下规则:
RewriteEngine On # 跳过实际存在的文件和目录,避免静态资源被误重写 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d # 将无后缀请求转换为对应.php文件的请求 RewriteRule ^(.*)$ $1.php [L]
针对Nginx服务器
在站点配置的location /块中添加:
location / { try_files $uri $uri/ $uri.php?$args; }
修改完成后重启Nginx服务生效。
2. 修正导航代码的逻辑问题
当前导航代码中,href使用干净路径(如/about),但urlIs判断的是带.php的路径(如/about.php),既会导致高亮状态异常,逻辑也不统一。需修正为:
<li><a href="/" class="<?php echo urlIs('/') ? 'bg-black text-black' : 'text-gray'; ?> nav-link"> Home</a></li> <li class="nav-item"><a href="/about" class="<?php echo urlIs('/about') ? 'bg-black text-black' : 'text-gray'; ?> nav-link">About Us</a></li> <li class="nav-item"><a href="/courses" class="<?php echo urlIs('/courses') ? 'bg-black text-black' : 'text-gray'; ?> nav-link">Courses</a></li>
注意:原代码中<?php urlIs('/about.php') ?>缺少echo,无法输出类名,必须补上;同时移除固定的active类,由urlIs动态判断添加高亮样式。
3. 确认urlIs函数的正确性
确保urlIs函数基于当前请求的URI做判断,示例实现如下:
function urlIs($path) { return $_SERVER['REQUEST_URI'] === $path; }
配置重写后,$_SERVER['REQUEST_URI']会返回/about而非/about.php,此时判断逻辑即可正常工作。
内容的提问来源于stack exchange,提问作者Krystian728
相关产品推荐
相关产品推荐

