Lighttpd 在 URL 中使用点 (.) 进行重写

Lighttpd 在 URL 中使用点 (.) 进行重写

我在 Debian 下安装了 lighttpd,运行了一个小型 API。当前的重写规则是:

url.rewrite = (
    "^/(.*)\.(.+)$" => "$0",
    "^/(.*)$" => "/index.php/$1"
)

想法是(像 Apache 上通常做的那样):

  1. 如果调用任何静态文件,则立即提供静态文件;
  2. 如果未找到作为静态文件的 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"
)
  • 重启 :

相关内容