เขียนเงื่อนไขใหม่ใน Lighttpd สำหรับ Slim Framework และ AngularJS

ฉันต้องย้ายเว็บไซต์ที่ใช้ Apache php ไปยัง lighttpd แต่ฉันประสบปัญหาในการเปลี่ยนแปลง

โครงสร้าง dir ของฉันคือ:

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

¹ ใน rootdir กฎการเขียนซ้ำใน 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 และโฟลเดอร์มุมมองโดยการเขียนใหม่ ³ เซิร์ฟเวอร์/การรับรองความถูกต้อง และไดเรกทอรีเซิร์ฟเวอร์/บริการมีการเขียนใหม่ของคุณเอง:

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",

เพื่อหลีกเลี่ยงการเขียนซ้ำบางไฟล์ (มันไม่สมเหตุสมผล แต่ควรข้ามไปเมื่อเราใช้ rewrite-if-not-file)

"/.*\.(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