将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代码。
答案 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",
)