Score:2

Apache .htaccess เขียนกฎใหม่เป็นกฎที่แปลง NGINX ไม่ได้ผล

ธง pe

ฉันใช้งานเว็บไซต์ "สคริปต์ PHP" บน aaPanel ที่ติดตั้ง Debian 10 ใช้งานได้ทั้งหมด แต่ภาพไม่แสดง/เสีย

เส้นทาง /image/ เป็นกฎการเขียนใหม่ และจะแก้ไขเป็น image.php ซึ่งจะโหลดรูปภาพจากโฟลเดอร์อัปโหลด หลังจากแปลง .htaccess เป็น Nginx และเพิ่มเข้าไปในระบบแล้ว เส้นทางอิมเมจทั้งหมดจะไป

www.website.com/image/m/112/112/335757712_1152702765_706821275.jpeg

เส้นทางที่แท้จริงควรเป็น

www.website.com/uploads/media/112/112/335757712_1152702765_706821275.jpeg

ด้านล่างนี้คือกฎ .htaccess

RewriteEngine เปิดอยู่
RewriteCond %{request_filename} -f
RewriteRule ^(.*) $1 [L]
RewriteRule ^(([^/]*)+)?$ index.php?a=$1 [L]

RewriteRule ^welcome/?$ index.php?a=welcome [NC]

RewriteRule ^stream/?$ index.php?a=stream [NC]
RewriteRule ^stream/logout$ index.php?a=stream&logout [NC]

RewriteRule ^explore/?$ index.php?a=explore [NC]
RewriteRule ^explore/filter/([^/]+)/?$ index.php?a=explore&filter=$1 [NC]
RewriteRule ^explore/popular$ index.php?a=explore&popular [NC]
RewriteRule ^explore/liked$ index.php?a=explore&liked [NC]

RewriteRule ^history/?$ index.php?a=history [NC]

RewriteRule ^upload/?$ index.php?a=upload [NC]

RewriteRule ^pro/?$ index.php?a=pro [NC]

RewriteRule ^stats/?$ index.php?a=stats [NC]
RewriteRule ^stats/filter/([^/]+)/?$ index.php?a=stats&filter=$1 [NC]

RewriteRule ^profile/([^/]+)/?$ index.php?a=profile&u=$1 [NC]
RewriteRule ^profile/([^/]+)/([^/]+)/?$ index.php?a=profile&u=$1&r=$2 [NC]
RewriteRule ^profile/([^/]+)/filter/([^/]+)/?$ index.php?a=profile&u=$1&filter=$2 [NC]

RewriteRule ^notifications/?$ index.php?a=notifications [NC]
RewriteRule ^notifications/filter/([^/]+)/?$ index.php?a=notifications&filter=$1 [NC]

RewriteRule ^settings/?$ index.php?a=settings [NC]
RewriteRule ^settings/([^/]+)/?$ index.php?a=settings&b=$1 [NC]

RewriteRule ^messages/?$ index.php?a=messages [NC]
RewriteRule ^messages/([^/]+)/([^/]+)/?$ index.php?a=messages&u=$1&id=$2 [NC]

RewriteRule ^track/([^/]+)/?$ index.php?a=track&id=$1 [NC]
RewriteRule ^track/([^/]+)/edit/?$ index.php?a=track&id=$1&type=edit [NC]
RewriteRule ^track/([^/]+)/report/?$ index.php?a=track&id=$1&type=report [NC]
RewriteRule ^track/([^/]+)/stats/?$ index.php?a=track&id=$1&type=stats [NC]
RewriteRule ^track/([^/]+)/likes/?$ index.php?a=track&id=$1&type=likes [NC]
RewriteRule ^track/([^/]+)/stats/filter/([^/]+)/?$ index.php?a=track&id=$1&type=stats&filter=$2 [NC]
RewriteRule ^track/([^/]+)/([^/]+)/?$ index.php?a=track&id=$1&name=$2 [NC]

RewriteRule ^playlist/([^/]+)/?$ index.php?a=playlist&id=$1 [NC]
RewriteRule ^playlist/([^/]+)/edit/?$ index.php?a=playlist&id=$1&edit=true [NC]
RewriteRule ^playlist/([^/]+)/([^/]+)/?$ index.php?a=playlist&id=$1&name=$2 [NC]

RewriteRule ^search/filter/([^/]+)/([^/]+)/?$ index.php?a=search&filter=$1&q=$2 [NC]

RewriteRule ^page/([^/]+)/?$ index.php?a=page&b=$1 [NC]

RewriteRule ^recover/?$ index.php?a=recover [NC]
RewriteRule ^recover/do/?$ index.php?a=recover&r=1 [NC]

RewriteRule ^image/([^/]+)/([^/]+)/([^/]+)/([^/]+)/?$ image.php?t=$1&w=$2&h= $3&src=$4

ด้านล่างนี้คือกฎการแปลงของ Nginx

ที่ตั้ง / {
  ถ้า (-e $request_filename){
    เขียนใหม่ ^/(.*) /$1 ตัวแบ่ง;
  }
  เขียนใหม่ ^/(([^/]*)+)?$ /index.php?a=$1 ตัวแตก;
}

สถานที่ /ยินดีต้อนรับ {
  เขียนใหม่ ^/welcome/?$ /index.php?a=welcome;
}

สถานที่ / สตรีม {
  เขียนใหม่ ^/stream/?$ /index.php?a=stream;
}

สถานที่ = / สตรีม / ออกจากระบบ {
  เขียนใหม่ ^(.*)$ /index.php?a=stream&logout;
}

ที่ตั้ง / สำรวจ {
  เขียนใหม่ ^/explore/?$ /index.php?a=explore;
  เขียนใหม่ ^/explore/filter/([^/]+)/?$ /index.php?a=explore&filter=$1;
}

สถานที่ = / สำรวจ / ยอดนิยม {
  เขียนใหม่ ^(.*)$ /index.php?a=explore&popular;
}

สถานที่ = /สำรวจ/ชอบ {
  เขียนใหม่ ^(.*)$ /index.php?a=explore&liked;
}

ที่ตั้ง / ประวัติ {
  เขียนใหม่ ^/history/?$ /index.php?a=history;
}

ตำแหน่ง / อัปโหลด {
  เขียนใหม่ ^/upload/?$ /index.php?a=upload;
}

ที่ตั้ง /pro {
  เขียนใหม่ ^/pro/?$ /index.php?a=pro;
}

สถานที่ / สถิติ {
  เขียนใหม่ ^/stats/?$ /index.php?a=stats;
  เขียนใหม่ ^/stats/filter/([^/]+)/?$ /index.php?a=stats&filter=$1;
}

ตำแหน่ง / โปรไฟล์ {
  เขียนใหม่ ^/profile/([^/]+)/?$ /index.php?a=profile&u=$1;
  เขียนใหม่ ^/profile/([^/]+)/([^/]+)/?$ /index.php?a=profile&u=$1&r=$2;
  เขียนใหม่ ^/profile/([^/]+)/filter/([^/]+)/?$ /index.php?a=profile&u=$1&filter=$2;
}

ตำแหน่ง / การแจ้งเตือน {
  เขียนใหม่ ^/notifications/?$ /index.php?a=notifications;
  เขียนใหม่ ^/notifications/filter/([^/]+)/?$ /index.php?a=notifications&filter=$1;
}

ตำแหน่ง / การตั้งค่า {
  เขียนใหม่ ^/settings/?$ /index.php?a=settings;
  เขียนใหม่ ^/settings/([^/]+)/?$ /index.php?a=settings&b=$1;
}

ตำแหน่ง / ข้อความ {
  เขียนใหม่ ^/messages/?$ /index.php?a=messages;
  เขียนใหม่ ^/messages/([^/]+)/([^/]+)/?$ /index.php?a=messages&u=$1&id=$2;
}

ตำแหน่ง / แทร็ก {
  เขียนใหม่ ^/track/([^/]+)/?$ /index.php?a=track&id=$1;
  เขียนใหม่ ^/track/([^/]+)/edit/?$ /index.php?a=track&id=$1&type=edit;
  เขียนใหม่ ^/track/([^/]+)/report/?$ /index.php?a=track&id=$1&type=report;
  เขียนใหม่ ^/track/([^/]+)/stats/?$ /index.php?a=track&id=$1&type=stats;
  เขียนใหม่ ^/track/([^/]+)/likes/?$ /index.php?a=track&id=$1&type=likes;
  เขียนใหม่ ^/track/([^/]+)/stats/filter/([^/]+)/?$ /index.php?a=track&id=$1&type=stats&filter=$2;
  เขียนใหม่ ^/track/([^/]+)/([^/]+)/?$ /index.php?a=track&id=$1&name=$2;
}

ตำแหน่ง / เพลย์ลิสต์ {
  เขียนใหม่ ^/playlist/([^/]+)/?$ /index.php?a=playlist&id=$1;
  เขียนใหม่ ^/playlist/([^/]+)/edit/?$ /index.php?a=playlist&id=$1&edit=true;
  เขียนใหม่ ^/playlist/([^/]+)/([^/]+)/?$ /index.php?a=playlist&id=$1&name=$2;
}

สถานที่ / ค้นหา {
  เขียนใหม่ ^/search/filter/([^/]+)/([^/]+)/?$ /index.php?a=search&filter=$1&q=$2;
}

สถานที่ / หน้า {
  เขียนใหม่ ^/page/([^/]+)/?$ /index.php?a=page&b=$1;
}

ตำแหน่ง / กู้คืน {
  เขียนใหม่ ^/recover/?$ /index.php?a=recover;
  เขียนใหม่ ^/recover/do/?$ /index.php?a=recover&r=1;
}

ตำแหน่ง / รูปภาพ {
  เขียนใหม่ ^/image/([^/]+)/([^/]+)/([^/]+)/([^/]+)/?$ /image.php?t=$1&w=$2 &h=$3&src=$4;
}

ฉันสับสนและคิดอะไรไม่ออกเลย ขอขอบคุณ

Score:3
ธง us

โดยปกติตัวแปลงกฎการเขียนซ้ำจะค่อนข้างแย่ เป็นการดีกว่าที่จะนำไปใช้ด้วยวิธี nginx ดั้งเดิม ในกรณีนี้ ภาพ สถานที่จะเป็นดังนี้:

สถานที่ ~ ^/ภาพ/([^/]+)/([^/]+)/([^/]+)/([^/]+)$ {
    try_files /image.php?t=$1&w=$2&h=$3&src=$4 =404;
}

BTW. ฉันหวังว่าคุณ อิมเมจ.php มีการตรวจสอบอินพุตที่ถูกต้องสำหรับความกว้าง / ความสูง ดังนั้นผู้โจมตีจึงไม่สามารถ DDoS เซิร์ฟเวอร์ของคุณด้วยการขอรูปภาพเวอร์ชัน 1M x 1M...

pe flag
ใช่ ฉันเห็นด้วยกับตัวแปลงการเขียนซ้ำ คุณให้กฎที่ถูกต้องแก่ฉัน หลังจากเพิ่มกฎแล้วภาพทั้งหมดของฉันก็กลับมามีชีวิตอีกครั้ง :) ขอบคุณมากสำหรับคำตอบนี้ ฉันได้เรียนรู้สิ่งใหม่ในวันนี้
cn flag
`เขียนใหม่' แทนจะดีกว่ามากในสถานการณ์นี้ `image.php` มีอยู่เสมอ ไม่มีประโยชน์ที่จะตรวจสอบการมีอยู่ของไฟล์ด้วย `try_files`..
us flag
ฉันไม่คิดว่ามีความแตกต่างระหว่าง `try_files` และ `rewrite` ที่นี่ ทั้งคู่พยายามเปิดไฟล์ การจัดการกรณีข้อผิดพลาดเท่านั้นที่แตกต่างกัน

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา