mod_rewrite apache到lighttpd规则

时间:2013-10-28 18:36:16

标签: apache mod-rewrite lighttpd

将apache .htaccess中看似简单的重写规则转换为lighttpd规则时遇到一些麻烦。

apache规则: RewriteRule (.*) index.php?baseURL=$1 [L,QSA]

基本上,整个URL作为baseURL参数传递,当然还会保留任何其他给定参数。

有一点需要注意的是,它只应用于单个目录,并且(希望)不包括baseURL中的该目录。

目前我在lighttpd中的内容是:

url.rewrite-once = (
"^\/Folder\/(.*)" => "/Folder/index.php?baseURL=$0"
)

这会获取整个网址并将其作为参数传递,包括\Folder\和参数,因此http://domain/Folder/test.php?someParam=1会使baseURL包含/Folder/test.php?someParam=1

我可以在php中解析它并使其工作,但重点是在apache和lighttpd中使用相同的php代码。

1 个答案:

答案 0 :(得分:2)

你有几个问题。 $0是整个匹配项,您希望$1引用第一个子匹配(.*)。像这样:

url.rewrite-once = (
    "^/Folder/(.*)" => "/Folder/index.php?baseURL=$1"
)

查询字符串仍有问题,它会生成两个?个。 E.g。

"/Folder/foo?bar=1" => "/Folder/index.php?baseURL=foo?bar=1" 

最终解决方案:

url.rewrite-once = (
    # Match when there are no query variables
    "^/Folder/([^\?]*)$" => "/Folder/index.php?baseURL=$1",
    # Match query variables and append with &
    "^/Folder/([^\?]*)\?(.*)$" => "/Folder/index.php?baseURL=$1&$2",
)