
我正在使用 Flight PHP 微框架,它包含自己的路由器,並且需要伺服器來重寫 index.php 檔案的請求。
它具有適用於 Apache 和 Nginx 的重寫規則,但不幸的是,我在生產中使用 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" )