Назад | Перейти на главную страницу

Lighttpd перезаписать с точкой (.) В URL

Я установил lighttpd под Debian с небольшим API. Текущие правила перезаписи:

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

Идея заключается в следующем (как обычно в Apache):

  1. Если вызывается какой-либо статический файл, сразу же обслуживайте статический файл;
  2. Если URL-адрес не найден как статический файл, перепишите запрос на index.php;

В большинстве случаев он работает нормально, однако возникает проблема, если URL-адрес содержит точку . он просто будет рассматривать его как статический файл, вызывающий ошибку 404 (из-за первой строки).

Как сделать так, чтобы этого не произошло и запрос был переписан на index.php? Также есть некоторые условия:

Спасибо.

Возможно, это можно сделать с помощью Lighty's параметр server.error-handler-404 с заданным index.php в качестве страницы ошибки. Если вы обрабатываете некоторую дополнительную информацию о неправильном URL-адресе (я вижу / $ 1 во втором правиле перезаписи), вы можете попытаться получить это через PHP SERVER_HTTP_REFERER.