มีความสำคัญต่อกฎการสั่งซื้อใน htaccess หรือไม่


9

ฉันหวังว่านี่เป็นคำตอบที่ง่ายใช่หรือไม่ใช่ (โปรดระบุสาเหตุ)

คำถามที่ 1: การวางกฎใน htaccess นั้นมีความสำคัญอย่างไร เนื่องจากเป็นรายการที่แยกจากกันโดยสิ้นเชิง: ยกตัวอย่างเช่น

Q2: ถ้าใช่ฉันจะใช้คำสั่งที่ถูกต้องหรือไม่ เพื่อเร่งความเร็วเครื่องยนต์ htacces และไม่เกินมันด้วยกฎที่ไม่จำเป็น?

Q3: เคล็ดลับใด ๆ เกี่ยวกับสิ่งที่จะปิดการใช้งาน / เพิ่มที่นี่ยินดีต้อนรับสู่ jucily +1!


# DirectoryIndex index.php /index.php
AddDefaultCharset UTF-8
RewriteEngine on
# Options All
# Options +FollowSymLinks
# Options +FollowSymLinks -Indexes -ExecCGI
# RewriteBase /

#####################################################

<IfModule mod_headers.c>
    ExpiresActive On
    ExpiresDefault M172800
    Header unset ETag
    FileETag None
    Header unset Pragma

    ##### STATIC FILES
    <FilesMatch "\\.(ico|jpg|png|gif|svg|swf|css|js|fon|ttf|eot|xml|pdf|flv)$">
        ExpiresDefault M1209600
        Header set Cache-Control "public, max-age=1209600"
    </FilesMatch>

    ##### DYNAMIC PAGES
    <FilesMatch "\\.(php)$">
        ExpiresDefault M604800
        Header set Cache-Control "public, max-age=604800"
    </FilesMatch>
</IfModule>

#####################################################

#  /page123 and /page123/ will all go to /page123.php
RewriteRule ^(.+)/$  /$1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php

####################################################

# NO WWW   http://www. becomes always http://
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]

##############################################################
# add own extensions that will be interpreted as php
AddType application/x-httpd-php .php
AddType image/svg+xml svg svgz
AddType text/css css
AddType text/javascript js
AddEncoding gzip svgz

##############################################################

ErrorDocument 500 /
ErrorDocument 404 /

คำตอบ:


10

ไฟล์. htaccess ใช้รูปแบบเดียวกันกับไฟล์การกำหนดค่า Apache ปกติดังนั้นจึงใช้กฎเดียวกัน

การตั้งค่าคอนฟิกส่วนใหญ่ไม่ได้ขึ้นอยู่กับการสั่งซื้อ แต่บางอย่างขึ้นอยู่กับการตั้งค่า

RewriteRuleและRewriteCondเช่นมีความอ่อนไหวต่อคำสั่งดังนั้นในกรณีนั้นคำตอบคือใช่

ดูเช่น

http://wiki.apache.org/httpd/RewriteRule

สำหรับคำอธิบายของลำดับที่ได้รับการประเมิน


4

มันสำคัญ. การอ้างอิงจากเอกสารประกอบสำหรับ RewriteRule :

ลำดับที่กำหนดกฎเหล่านี้มีความสำคัญ - นี่คือลำดับที่จะใช้ในเวลาทำงาน


1
ภายใน mod_rewrite มันสำคัญ - ใช่ อย่างไรก็ตาม OP ไม่ได้ระบุ mod_rewrite เป็นพิเศษและมีคำสั่งอื่น ๆ อีกมากมายจากโมดูลอื่น ๆ ใน.htaccessไฟล์ของ OP ในระยะสั้นคำสั่งจากโมดูลที่แตกต่างกัน (และในภาชนะที่แตกต่างกัน) ดำเนินการอย่างอิสระและในลำดับที่กำหนดไว้ล่วงหน้าโดยไม่คำนึงถึงลำดับที่ปรากฏในไฟล์ปรับแต่ง
MrWhite

1

ฉันไม่สามารถพูดได้ว่าตัวอย่างเช่นลำดับของ<files>vs <Rewrite>มีผลต่อประสิทธิภาพอย่างไร ฉันพยายามค้นหามันด้วยตัวเอง ฉันไม่สามารถหาข้อมูลใด ๆ เกี่ยวกับเรื่องนี้ได้

อย่างไรก็ตามฉันอยากจะชี้ให้เห็นว่าระหว่างRewritevs Redirect(และRedirectMatch) ลำดับของการดำเนินการอาจไม่อยู่ในลำดับที่ปรากฏแม้ว่าบ่อยครั้งที่สิ่งที่ผู้คนคาดหวัง ..
โดยเฉพาะโมดูลmod_rewriteและmod_aliasประมวลผล / ดำเนินการอย่างอิสระและในที่สั่งซื้อ

  1. คำสั่ง mod_rewrite ทั้งหมด ( Rewrite) ถูกใช้งาน (ตามลำดับที่แสดงรายการ)
  2. แล้วทุก mod_alias สั่ง ( RedirectและRedirectMatch) จะดำเนินการในลำดับที่พวกเขามีการระบุไว้ในแฟ้ม

ดังนั้นแม้ว่าRedirectเงินจะได้รับRewriteการเปลี่ยนเส้นทางจะถูกดำเนินการเฉพาะหลังจากที่การเขียนซ้ำทั้งหมดได้รับการดำเนินการแล้ว

วิธีหนึ่งที่จะทำให้ไฟล์ "อ่านได้" ถ้าคุณมีทั้งการเปลี่ยนเส้นทางและการเขียนใหม่คือการไม่ใช้mod_aliasโมดูลเลย mod_rewriteแต่ให้ใช้เท่านั้น เขียนซ้ำด้วยการตั้งค่าสถานะ [R] เป็นหลักมันจะเขียนใหม่
คำตอบของผู้ดูแลเว็บนี้แสดงให้เห็นว่า

ตอนนี้คำสั่งทั้งหมดจะถูกดำเนินการตามลำดับที่ปรากฏในไฟล์ดังนั้นจึงไม่มีความประหลาดใจที่น่ารังเกียจหรือความสับสนเกี่ยวกับลำดับของการดำเนินการ อีกวิธีหนึ่งคุณสามารถย้ายทั้งหมดRedirectและRedirectMatchคำสั่งไปยัง "ด้านล่าง" ของไฟล์เพื่อเตือนตัวเองว่าไฟล์เหล่านั้นจะไม่ถูกดำเนินการจนกว่าจะถึงตอนRewriteนั้น

ต่อไปนี้เป็นคำตอบที่ดีของ StackExchange ที่ตรัสรู้ถึงประเด็นนี้:

สำหรับส่วนที่เหลือฉันไม่สามารถค้นหาข้อมูลใด ๆ เกี่ยวกับประสิทธิภาพระหว่างการวางfilesก่อนหรือหลังrewrites เช่น คำแนะนำตามประสิทธิภาพที่ฉันพบคือหากมีการเข้าถึงไฟล์การกำหนดค่าเซิร์ฟเวอร์ดังนั้นควรย้ายให้มากที่สุดจากไฟล์. htaccess ไปยังไฟล์ config และปิดใช้งานไฟล์. htaccess ทั้งหมด (หรือระบุไดเรกทอรีเฉพาะที่ควรอ่านไฟล์. htaccess )

ตรรกะมีกฎที่วางไว้ในไฟล์กำหนดค่าที่ต้องอ่านเพียงครั้งเดียว หากเปิดการประมวลผล htaccess ดังนั้นสำหรับทุกคำขอทุกไดเรกทอรีของเซิร์ฟเวอร์ (ที่หรือสูงกว่าไดเรกทอรีที่ร้องขอ) จะต้องค้นหาไฟล์ htaccess ที่เป็นไปได้ไม่ว่าจะมีอยู่หรือไม่ก็ตาม และถ้าพวกเขาทำทุกคนจะต้องอ่านใหม่

  • เอกสาร apacheกล่าวถึงสิ่งนี้ที่ด้านล่างของส่วน ". htaccess files" แต่ไม่ได้อธิบายว่าทำไมและคุณต้องขุดไปรอบ ๆ เพื่อหาวิธี
  • http://www.apacheweek.com/features/tips "How to Speed ​​up Apache section" แสดงให้เห็นว่าทำไมในการสั่งซื้อด่วน
  • ประสิทธิภาพ Apache: ปิดการใช้งาน. htaccess - กระโดดลงเพื่ออ่านส่วน "ปิดการใช้งาน. htaccess และใช้ mod_rewrite ภายใน Apache config" ก่อน

-1

ฉันมีความกังวลเหมือนกันที่โพสต์ แต่นี่เป็นมุมมองของเว็บไซต์ผู้ดูแลเซิร์ฟเวอร์ที่ช่วยให้พวกเขาเริ่มต้น apache หลังจากเปลี่ยนการกำหนดค่าเซิร์ฟเวอร์ apache

จนถึงตอนนี้คำตอบที่ดีที่สุดที่ฉันได้รับคือรายการคำสั่งที่เกี่ยวข้องกับไฟล์ก่อน

สิ่งนี้สมเหตุสมผลเกี่ยวกับความต้องการของ apache ในการจัดการไดเร็กทอรีและคำแนะนำ htaccess ในแต่ละไดเร็กทอรี

ดังนั้นรายการไฟล์คำสั่งที่เกี่ยวข้องก่อนจากนั้นบล็อกที่ชัดเจนเพื่อสิ้นสุดกระบวนการ apache htaccess ตามลำดับที่ชัดเจน

วิธีแก้ปัญหาที่เป็นไปได้ในการปรับการร้องขอให้ดีที่สุด: - แก้ไขการร้องขอที่เกี่ยวข้องกับ url - ข้อ จำกัด เกี่ยวกับสารบบ - ข้อ จำกัด เกี่ยวกับดัชนี - ข้อ จำกัด เกี่ยวกับไฟล์ - ข้อ จำกัด พร็อกซี <- ฆ่าทั้งหมด - ตัวแทนผู้ใช้ว่างเปล่า <- ฆ่าทั้งหมด ...

ความกังวลของฉันเกี่ยวข้องกับลำดับของคำสั่ง ตัวอย่างเช่นฉันควรตั้งค่าดัชนีไฟล์และส่วนหัวก่อน RewriteConds หรือไม่


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