Regra de reescrita Lighttpd para microframework Flight PHP

Regra de reescrita Lighttpd para microframework Flight PHP

Estou usando o microframework Flight PHP, que inclui seu próprio roteador e precisa que o servidor reescreva as solicitações no arquivo index.php.

Ele apresenta regras de reescrita para Apache e Nginx, mas para meu azar, estou usando lighttpd em produção e não estou realmente interessado em mudar isso.

Então, odeio ser aquele cara que só diz: Me dê a solução.. Mas sério, alguém me ajude, não tenho ideia de como reescrever solicitações Lighttpd.

A configuração do Apache é assim:

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

E a configuração do Nginx assim:

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

Minha própria configuração do Lighttpd atualmente se parece com esta:

$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" )
}

Mas não funciona. Como posso fazer com que o subdomínio seja reescrito como acima, para fazer o Flight PHP funcionar? Gosto da estrutura, então ficaria muito triste se tivesse que mudá-la.

Obrigado rapazes! :)

Responder1

  • sua regra de reescrita não fez "QSA" - excluiu a string de consulta
  • sua reescrita também foi acionada para arquivos existentes (não correspondendo !-fe !-d)

O seguinte deve manter a string de consulta e acionar apenas se o caminho solicitado não for um arquivo real normal (mas acionadores para diretórios, que não correspondem ao apache !-d- embora eu argumente que !-dprovavelmente é um bug na configuração do apache).

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

Você também pode usar uma expressão regular ancorada:

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

informação relacionada