在 lighttpd 中实现 apache 等效 mod_rewrite 功能

Implement apache equivalent mod_rewrite functionality in lighttpd

这是 mod_rewrite .htaccess 文件,该文件旨在为我的网络应用程序在 Apache 服务器上工作

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

这些是一些可能有用的相关 $_SERVER 参数。

$_SERVER["REQUEST_URI"]-    /cs200/tokens/
$_SERVER["DOCUMENT_ROOT"]-  /var/www/servers/www
$_SERVER["SCRIPT_FILENAME"]-    /var/www/servers/www/cs200/tokens/index.php
$_SERVER["PHP_SELF"] - /cs200/tokens/index.php

我有一个 lighttpd 服务器,我想在其中实现与此 .htaccess 文件相同的功能。 我在网上参考了很多资源并提出了这些。但其中 none 确实有效。 假设我的域名是 www.example.com。我尝试了以下示例,其中 none 个可以解决问题

$HTTP["host"] =~ "www.example.com" {

url.rewrite-once = (
    "^/cs200/tokens(.*)" => "/index.php" 
)
}

示例 2

$HTTP["host"] =~ "www.example.com" {

url.rewrite-once = (
    "^/cs200/tokens/(.*)" => "/cs200/tokens/index.php" 
)
}

None 其中似乎正在执行 lighttpd 上此 apache .htaccess 文件的功能。在过去的 12 个小时里,这个问题一直困扰着我,我有点想放弃这个问题。 谁能帮帮我?

P.S我的Lighttpd服务器版本是1.4.39

好吧,我还是想通了。这适用于碰巧遇到此问题的任何人。 lighttpd 中的 mod_rewrite 默认情况下在配置中禁用,必须在开头的 lighttpd.conf 中取消注释

server.modules = (
"mod_access",
"mod_alias",
"mod_compress",
"mod_redirect",
"mod_simple_vhost",
"mod_setenv",
    #"mod_rewrite", //remove the hash here

)

上述条件对我有用的正则表达式也是这个

url.rewrite-once = (
    "^/cs200/tokens(.*)" => "/cs200/tokens/index.php" 

这也应该添加到

$HTTP["host"] =~ "www.example.com"