在 lighttpd 中实现 apache 等效的 mod_rewrite 功能

在 lighttpd 中实现 apache 等效的 mod_rewrite 功能

这是 mod_rewrite .htaccess 文件,用于我的 Web 应用的 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 文件相同的功能。我参考了很多在线资源并想出了这些方法。但它们实际上都不起作用。假设我的域名是 www.example.com。我尝试了以下示例,但这些都不起作用

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

这些似乎都无法实现 lighttpd 上这个 apache .htaccess 文件的功能。这个问题已经困扰了我 12 个小时,我有点想放弃这个问题了。有人能帮我吗?

PS我的Lighttpd服务器版本是1.4.39

答案1

好吧,不管怎样,我还是搞明白了。这适用于任何碰巧遇到此问题的人。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"

相关内容