Dot-Htaccess

在 lighttpd 中實現 apache 等效的 mod_rewrite 功能

  • February 12, 2016

這是 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

好的,所以我還是想通了。這適用於任何偶然發現此問題的人。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”

引用自:https://serverfault.com/questions/755063