
저는 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
).
다음은 쿼리 문자열을 유지하고 요청된 경로가 일반 실제 파일이 아닌 경우에만 트리거해야 합니다(그러나 아파치와 일치하지 않는 디렉터리에 대해 트리거합니다. 아마도 아파치 구성의 버그일 것이라고 !-d
주장할 것입니다 ).!-d
url.rewrite-if-not-file = ( "(\?(.*))?" => "/index.php$1" )
고정된 정규식을 사용할 수도 있습니다.
url.rewrite-if-not-file = ( "^.*(\?(.*))?$" => "/index.php$1" )