将 lighttpd 重写规则转换为 apache

将 lighttpd 重写规则转换为 apache

我正在将应用程序从 Unix 转换为基于 Windows 的基础架构,其中一项更改是使用 apache 而不是 lighttpd 作为 Web 服务器。大部分转换都很简单,但是我在将重写逻辑转换到新服务器时遇到了问题。花了一天时间尝试各种配置后,我还是没有成功。要么没有 URL 被重写,要么所有 URL 都被重写 - 这两种情况都不有效。以下是 lighttpd 规则:

"^/$" => "/apex/f?p=314:1::::::",
"^/(view)/(\d{10,16})/(\d{1,10})/" => "/apex/f?p=314:ticket:$2::NO::P3_TICKET:$3",
"^/(estimate)/(\d{10,16})/(\d{1,10})/" => "/apex/f?p=314:estimate:$2::NO::P6_TICKET:$3",
"^/([A-Za-z0-9_-]*)/(\d{10,16})/$" => "/apex/f?p=314:$1:$2::NO:::",
"^/([A-Za-z0-9_-]*)/(\d{10,16})/f" => "/apex/f?p=314:$1:$2::NO:::",
"^/authenticate/(\d{10,16})/(.*)/$" => "/apex/f?p=314:authenticate:$1::NO::UN,HMAC,TS:$2",
"^/authenticate/(\d{10,16})/(.*)/wwv_flow.accept$" => "/apex/wwv_flow.accept",
"^/admin/$" => "/apex/f?p=4550:::::::"

这是我迄今为止在 .htaccess 中尝试过的:

RewriteEngine On
RewriteRule ^/(view)/(\d{10,16})/(\d{1,10})/ /apex/f?p=314:ticket:$2::NO::P3_TICKET:$3 [QSA,L]
RewriteRule ^/(estimate)/(\d{10,16})/(\d{1,10})/ /apex/f?p=314:estimate:$2::NO::P6_TICKET:$3 [QSA,L]
RewriteRule ^/([A-Za-z0-9_-]*)/(\d{10,16})/$ /apex/f?p=314:$1:$2::NO::: [QSA,L]
RewriteRule ^/([A-Za-z0-9_-]*)/(\d{10,16})/f /apex/f?p=314:$1:$2::NO::: [QSA,L]
RewriteRule ^/authenticate/(\d{10,16})/(.*)/$ /apex/f?p=314:authenticate:$1::NO::UN,HMAC,TS:$2 [QSA,L]
RewriteRule ^/authenticate/(\d{10,16})/(.*)/wwv_flow.accept$ /apex/wwv_flow.accept [QSA,L]
RewriteRule ^/admin/$ /apex/f?p=4550 [QSA,L]
RewriteRule ^/$ /apex/f?p=314:1:::::: [QSA,L]

目前,这会导致所有 URL 尝试被重写。这会破坏网站的大部分功能,因为网站的大部分功能并未隐藏在重写规则/逻辑后面。

我在这里做错了什么? Apache 文档对我来说不如 lighttpd 文档那么清晰,所以我很难看出哪里出了问题。

相关内容