Правило перезаписи Lighttpd для микрофреймворка Flight PHP

Правило перезаписи Lighttpd для микрофреймворка Flight PHP

Я использую микрофреймворк Flight PHP, который включает в себя собственный маршрутизатор и требует, чтобы сервер переписывал запросы в файл index.php.

В нем есть правила перезаписи для Apache и Nginx, но мне не повезло, я использую lighttpd в продакшене и не особо заинтересован в изменении этого.

Так что я ненавижу быть тем парнем, который просто говорит: «Дайте мне решение»... Но серьезно, кто-нибудь, помогите мне, я понятия не имею, как переписывать запросы Lighttpd.

Конфигурация Apache выглядит так:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [QSA,L]

А конфигурация Nginx такая:

server {
    location / {
        try_files $uri $uri/ /index.php;
    }
}

Моя собственная конфигурация Lighttpd на данный момент выглядит так:

$HTTP["host"]  == "zyx.abc.dk"{
        server.document-root = "/var/www/app1/zyx"
        accesslog.filename         = "/var/log/lighttpd/zyx-log.log"
        url.rewrite-once = ( "(.*)" => "/index.php" )
}

Но это не работает. Как мне сделать так, чтобы поддомен был переписан, как указано выше, чтобы Flight PHP работал? Мне нравится фреймворк, поэтому мне было бы довольно грустно его менять.

Спасибо ребята! :)

решение1

  • Ваше правило перезаписи не выполнило «QSA» — оно удалило строку запроса
  • ваша перезапись также сработала для существующих файлов (не соответствующих !-fи !-d)

Следующий код должен сохранить строку запроса и срабатывать только в том случае, если запрошенный путь не является обычным реальным файлом (но срабатывает для каталогов, которые не соответствуют Apache !-d— хотя я бы сказал, что это, !-dвероятно, ошибка в конфигурации Apache).

url.rewrite-if-not-file = ( "(\?(.*))?" => "/index.php$1" )

Вы также можете использовать закрепленное регулярное выражение:

url.rewrite-if-not-file = ( "^.*(\?(.*))?$" => "/index.php$1" )

Связанный контент