URL เนื้อหาใดที่ยอมรับได้ในการติดตั้ง“ vanilla” MU


9

Wordpress ดูเหมือนจะให้เนื้อหาได้รับการจัดการโดย URIs จำนวนมากในการติดตั้ง MU ตัวอย่างเช่น:

 example.com/wp-content/blogs.dir/5/files/picture.jpg
 example.com/bob/files/picture.jpg
 example.com/bob/wp-content/blogs.dir/5/files/pictures.jpg

ทุกคนปรากฏเส้นทางไปยังสถานที่เดียวกัน มีนามแฝงเพิ่มเติมหรือไม่ อันไหนที่เป็นที่ยอมรับ อุบัติเหตุเหล่านี้หรือไม่? มีตัวกรองที่เกี่ยวข้องหรือไม่

คำตอบ:


4

คำตอบสั้น ๆ

example.com/bob/files/picture.jpg เป็นที่ต้องการ URL ที่ยอมรับสำหรับภาพในการติดตั้ง URL สองรายการที่มีblogs.dirใน URL นั้นเหมือนกันเป็นหลักและทั้งคู่ก็ใช้ประโยชน์จากโครงสร้างระบบไฟล์ เส้นทางที่มี 'bob' อยู่เนื่องจากคุณทำการติดตั้งไดเรกทอรีย่อยไม่ใช่การติดตั้งโดเมนย่อย เส้นทางอื่นจะมีอยู่ตามไซต์อื่น ๆ ของคุณเช่น example.com/fred/wp-content/blogs.dir/5/files/pictures.jpg มิฉะนั้นจะไม่มีเส้นทางอื่นอยู่

คำตอบยาว

มีหลายสิ่งที่สามารถอธิบายเกี่ยวกับกระบวนการนี้และฉันไม่แน่ใจ 100% ของระดับรายละเอียดที่คุณกำลังมองหาดังนั้นฉันจะโลภพื้นฐานที่นี่

WordPress Multisite จัดเก็บไฟล์ตามblog_id("5" หลัง "/blogs.dir/") เพื่อจัดระเบียบสิ่งต่าง ๆ และแยกไฟล์ของไซต์ต่างๆ โครงสร้างไดเรกทอรีนี้ไม่ได้มีไว้เพื่อสาธารณะ WordPress ใช้เขียนกฎเส้นทาง^files/(.+)ไปwp-includes/ms-files.php?file=$1และจากนั้นwp-includes/ms-files.phpจะประมวลผลและผลภาพและ / หรือบางส่วนหัวที่เป็นประโยชน์ มีข้อดีบางประการดังนี้:

  • ในแง่ของความปลอดภัยข้อมูลที่น้อยลงจะดีกว่าเสมอ "wp-content / blogs.dir / 5" เป็น TMI เล็กน้อย - มันบอกว่าคุณกำลังใช้ WordPress Multisite และนั่นblog_idคือ 5
  • โครงสร้าง URL นั้นเหมือนกับโครงสร้างของการติดตั้งเพียงไซต์เดียว หากคุณต้องการย้ายไซต์จากการติดตั้ง Multisite ไปเป็นของตนเองคุณจะไม่ต้องอัปเดตข้อมูลอ้างอิงเหล่านั้นในฐานข้อมูลหรือ 301 เส้นทางเก่าสำหรับการอ้างอิงภายนอก
  • คุณสามารถย้ายไดเรกทอรีไฟล์ออกจากการเข้าถึงของประชาชนหรือdeny from allผ่าน.htaccessดังนั้นตัวอย่างเช่นคนที่ไม่สามารถเข้าถึงขนาดภาพต้นฉบับถ้าคุณไม่ต้องการ
  • คุณสามารถเพิ่มการควบคุมการเข้าถึงไฟล์เฉพาะ

มีหนึ่งข้อเสียเปรียบหลักซึ่งเป็นภาพ / ไฟล์ผ่าน PHP (และอาจต้องใช้แบบสอบถาม MySQL ไม่กี่) จึงต้องใช้ทรัพยากรมากขึ้น หากคุณติดตั้งปลั๊กอินแคชแล้วทรัพยากรเพิ่มเติมควรไม่สำคัญ

ในส่วนที่เกี่ยวกับตัวกรองคุณไม่สามารถกรองสิ่งใด ๆ ในกระบวนการได้อย่างง่ายดายด้วยเหตุผลเดียว: ไม่ว่าจะเป็นปลั๊กอิน mu-pluginsหรือธีมของคุณ * สิ่งที่ดีที่สุดที่คุณสามารถทำได้คือแทนที่ค่าคงที่ใน wp-config.php นี่คือค่าคงที่มีประโยชน์ / เกี่ยวข้องมากที่สุดที่คุณสามารถลบล้างได้:

if ( !defined( 'UPLOADBLOGSDIR' ) )
    define( 'UPLOADBLOGSDIR', 'wp-content/blogs.dir' );

if ( !defined( 'UPLOADS' ) ) {
    // Uploads dir relative to ABSPATH
    define( 'UPLOADS', UPLOADBLOGSDIR . "/{$wpdb->blogid}/files/" );
    if ( 'wp-content/blogs.dir' == UPLOADBLOGSDIR )
        define( 'BLOGUPLOADDIR', WP_CONTENT_DIR . "/blogs.dir/{$wpdb->blogid}/files/" );
}

/**
 * Optional support for X-Sendfile header
 */
if ( !defined( 'WPMU_SENDFILE' ) )
    define( 'WPMU_SENDFILE', false );

/**
 * Optional support for X-Accel-Redirect header
 */
if ( !defined( 'WPMU_ACCEL_REDIRECT' ) )
    define( 'WPMU_ACCEL_REDIRECT', false );

* แม้ว่าปลั๊กอินไม่ได้รับการโหลดลดลงอินทำ ดังนั้นในขณะที่คุณไม่สามารถใช้ปลั๊กอินมาตรฐาน WordPress ยังคงวางรากฐานในการทำสิ่งที่คุณต้องการเช่น (ดังกล่าวข้างต้น) เพิ่มการควบคุมการเข้าถึงไฟล์สำคัญ การดรอปอินsunrise.phpจะเป็นที่ที่ดีในการเพิ่มรหัสดังกล่าว


2

ในการติดตั้งแบบหลายไซต์ติดตั้งด้วย WordPress 3.5 หรือใหม่กว่าms-files.phpจะถูกข้ามโดยตรงและblogs.dirไม่ได้ใช้

แต่การอัปโหลดจะถูกเก็บไว้ในwp-content/blogs/{blog_id}และอ้างถึงเช่นนั้น ซึ่งหมายความว่ามีเพียงวิธีเดียวในการเข้าถึงไฟล์ในการติดตั้งโดเมนย่อยและเพียงสองวิธีในการติดตั้งไดเรกทอรีย่อย

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.