我正在使用 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" )