Files
FamilyBook/router.php
T

31 lines
1.3 KiB
PHP
Raw Normal View History

<?php
/**
* 前端控制器(路由表)—— 只给 **PHP 内置服务器** 用(php -S ... router.php)。
*
* 为什么要它:
* · 线上是 Apache,`/dav/3.ics/` 这种没有对应文件的 URL 靠 .htaccess 重写到 dav.php;
* · 本地 `php -S` **不读 .htaccess**,所以同一个地址会被当成"文件不存在"直接 404,
* 于是「CalDAV 在本地测不了、只能上线验证」——这正是最容易上线才发现问题的写法。
* 这个文件把那几条重写规则用 PHP 重述一遍,本地与线上一模一样的路径行为。
*
* ⚠️ 里面**不写任何业务**:只决定"交给哪个脚本",所有业务仍在 index.php / dav.php / media.php。
* 线上部署不该带它(Apache 走 .htaccess),但带着也无害 —— 它不会被执行。
*/
$path = (string)parse_url((string)($_SERVER['REQUEST_URI'] ?? '/'), PHP_URL_PATH);
// CalDAV:/dav/ 及其子路径(/dav/、/dav/3.ics/、/dav/3.ics/12.ics)
if (preg_match('#^/dav(/.*)?$#', $path)) {
require __DIR__ . '/dav.php';
return true;
}
// 真实存在的文件(静态资源、media.php 等)→ 交给内置服务器自己处理
$file = __DIR__ . $path;
if ($path !== '/' && is_file($file)) {
return false;
}
// 其余交给主路由
require __DIR__ . '/index.php';
return true;