我在 Debian 下安装了 lighttpd,运行了一个小型 API。当前的重写规则是:
url.rewrite = (
"^/(.*)\.(.+)$" => "$0",
"^/(.*)$" => "/index.php/$1"
)
想法是(像 Apache 上通常做的那样):
- 如果调用任何静态文件,则立即提供静态文件;
- 如果未找到作为静态文件的 URL,则将请求重写为
index.php
;
它大多数时候都能正常工作,但是有一个问题,如果 URL 包含 DOT,.
它就会将其视为静态文件,从而导致 404 错误(因为第一行)。
我如何确保这种情况不会发生并将请求重写为index.php
?此外,还有一些条件:
- 我无法真正预测静态文件的位置,它应该检查文件是否真的存在,而不仅仅是“哦,它有一个点,一定是静态的”或“如果文件夹X不重写”;
- URL 可能包含多个点,最多包含 5 个点。
谢谢。
答案1
也许可以使用 Lighty 的server.error-handler-404 选项给定 index.php 作为错误页面。如果您正在处理有关错误 URL 的一些附加信息(我在第二个重写规则中看到 /$1),您可以尝试通过 PHP 的 SERVER_HTTP_REFERER 获取此信息。
答案2
url.rewrite = (
"^/(.*)\.(.+)$" => "$0",
"^/(.*)$" => "/index.php/$0/$1"
)
- 重启 :