我正在将应用程序从Unix转换到基于Windows的基础架构,其中一个变化是使用apache而不是lighttpd作为Web服务器。 大多数这种转换是直接的,但是我有问题将重写逻辑转换到新的服务器。 花了一天的时间尝试各种configuration后,我没有任何成功。 没有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文档那样清晰(对我来说),所以我很难看到有什么问题。