Переписать условия в Lighttpd для Slim Framework и AngularJS

Мне нужно перенести веб-сайт на основе Apache php на lighttpd, но у меня возникают проблемы с его изменением.

Моя структура каталога:

-rootdir
--index.php¹
--login.php²
--views²
--server
---service³
---auth³

¹ В корневом каталоге правило перезаписи в Apache было следующим:

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !\.(js|ico|gif|jpg|png|css|html)$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [QSA,L]

² файл login.php и папку представлений следует избегать путем перезаписи ³ каталоги server/auth и server/service должны быть переписаны по-своему:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [QSA,L]

Пытаюсь построить правило, и почти все правильно, но /server/service нет

url.rewrite-if-not-file = (
                "^/login.php\/?([^.]+)$/" => "/login.php/$1", #ok
                "^/(views|assets|css|images|application)/(.*)" => "$0", #ok
                "/server/service/.*\?(.*)$" => "/server/service/index.php?$1", #return rewrite response of rootdir/index.php
                "/server/auth/.*\?(.*)$" => "/server/auth/index.php?$1", #ok
                "/.*\.(js|ico|gif|jpg|png|css|html)$" => "$0", #ok
                "/.*\?(.*)$" => "/index.php?$1",
               "" => "/index.php"
         )

пример использования:

www.example.com/home/id/2 ‹-- используйте /rootdir/index.php www.example.com/server/auth/check/sessionid2235232132 ‹-- используйте /server/auth/index.php www.example. com/server/server/db/clients/getall ‹-- используйте /server/service/index.php


person LeonanCarvalho    schedule 21.07.2014    source источник


Ответы (1)


Нет простого способа перенести некоторые конкретные случаи, подобные этому.

После некоторых попыток и тестов я достиг этих правил в этом случае.

 url.rewrite-if-not-file = (
                "^/login.php\/?([^.]+)$/" => "/login.php/$1",
                "^/(views|assets|css|images|application)/(.*)" => "$0",
                "/server/auth/.*\?(.*)$" => "/server/auth/index.php?$1",
                "/server/service/.*\?(.*)$" => "/server/service/index.php?$1",
                "/.*\.(js|ico|gif|jpg|png|css|html)$" => "$0", #ok
                ".*\?(.*)$" => "/index.php?$1",
                "" => "/index.php"
    )

Чтобы избежать условий перезаписи для определенного файла:

 "^/login.php\/?([^.]+)$/" => "/login.php/$1",

Чтобы избежать условия перезаписи в определенных папках:

 "^/login.php\/?([^.]+)$/" => "/login.php/$1",

Чтобы переписать строку запроса для определенных файлов в определенной папке

"/server/auth/.*\?(.*)$" => "/server/auth/index.php?$1",
"/server/service/.*\?(.*)$" => "/server/service/index.php?$1",

Чтобы избежать перезаписи некоторых файлов (это не имеет смысла, но его следует пропустить, когда мы используем перезапись, если не файл)

"/.*\.(js|ico|gif|jpg|png|css|html)$" => "$0",

Когда мы используем интерфейс javascript, такой как Angularjs, с дружественным URL-адресом, очень важно создать эти 2 правила перезаписи.

".*\?(.*)$" => "/index.php?$1",
"" => "/index.php"

В моем сценарии у меня есть 2 серверных бэкэнда (аутентификация и сервис), использующих slimframework, и у меня есть внешний интерфейс в AngularJS. Эти правила позволяют мне без проблем переписывать URL-адреса на внутреннем и внешнем интерфейсе.

person LeonanCarvalho    schedule 28.07.2014