CLI内置服务器将链接重定向到根目录导致相对链接失效如何解决
问题原因
PHP内置CLI服务器的默认文档根目录是执行php -S命令时的当前工作目录,而非入口文件所在目录。
如果你在/php的上级目录启动服务,服务器根目录就是上级目录,页面相对路径会基于当前访问的URL根路径解析:当你访问http://localhost:8000/时,href="article.php"会被解析为http://localhost:8000/article.php,而非你预期的http://localhost:8000/php/article.php,因此触发404。
你之前尝试的./article.php本质和直接写article.php一致,都是指向当前URL路径下的资源;/./article.php则是指向服务器根目录下的资源,都无法命中/php目录下的文件,因此无效。
解决方案
方案1:切换到项目目录启动服务
直接进入文件存放的/php目录后再启动内置服务器,即可将/php设为根目录:
cd /path/to/your/php php -S localhost:8000
方案2:启动时显式指定文档根目录
无需切换目录,通过-t参数直接指定根目录为/php即可:
php -S localhost:8000 -t /path/to/your/php
方案3:全局配置路径前缀(适用于需要保留上级目录为根的场景)
如果必须将上级目录作为服务器根目录,可以通过两种方式统一配置前缀:
- 在页面
<head>标签内添加base标签,所有相对链接都会基于该标签的href属性解析:
<base href="/php/">
- 在PHP入口文件中定义全局基础路径常量,所有链接都拼接该常量:
// 入口文件顶部定义 define('BASE_PATH', '/php/'); // 链接写法 <a href="<?= BASE_PATH ?>article.php" class="post__link">Continue reading</a>
内容的提问来源于stack exchange,提问作者Tristan
相关产品推荐
相关产品推荐

