Score:1

htaccess เขียนใหม่ในไดเร็กทอรีรูทเท่านั้น (โดยทั่วไป)

ธง ht

สวัสดี ฉันกำลังพยายามให้ htaccess เขียนใหม่ก็ต่อเมื่อไฟล์ symlink หรือไดเร็กทอรีไม่มีชื่อนั้น ซึ่งฉันทำสำเร็จแล้วที่นี่:

RewriteCond %{REQUEST_FILENAME} -s [หรือ]
RewriteCond %{REQUEST_FILENAME} -l [หรือ]
RewriteCond %{REQUEST_FILENAME} -d
กฎการเขียนซ้ำ ^(.+) - [PT,L]
RewriteRule ^(.*)$ index\.php?var=$1 [QSA,L]

ทำงานได้อย่างสมบูรณ์ อย่างไรก็ตาม ฉันต้องการให้สิ่งนี้เกิดขึ้นในไดเร็กทอรีรูทเท่านั้น ไม่ใช่ในไดเร็กทอรีย่อยใดๆ ฉันจะทำสิ่งนี้ให้สำเร็จด้วยวิธีทั่วไปได้อย่างไร (หมายความว่าฉันไม่ต้องการระบุ URL ในไฟล์ .htaccess อย่างชัดเจน)

Score:1
ธง kz

เพื่อป้องกันไม่ให้คำสั่ง mod_rewrite ถูกประมวลผลสำหรับคำขอที่อยู่นอกรูทของเอกสาร ให้วางกฎต่อไปนี้ที่ด้านบนสุดของไฟล์:

# ป้องกันการประมวลผลเพิ่มเติมหากคำขออยู่นอกไดเรกทอรีราก
กฎการเขียนซ้ำ / - [L]

โดยทั่วไปข้างต้นระบุว่าสำหรับเส้นทาง URL ที่ร้องขอซึ่งมีเครื่องหมายทับ ให้หยุดที่นี่ (สิ่งนี้จะตรวจจับคำขอที่ลงท้ายด้วยเครื่องหมายทับด้วย - นั่นเป็นปัญหาหรือไม่)


หรือคุณสามารถทำให้ regex บนกฎสองข้อที่มีอยู่มีความเฉพาะเจาะจงมากขึ้น เพื่อให้ใช้ได้กับคำขอในไดเรกทอรีรากเท่านั้น

ตัวอย่างเช่น:

# ใช้กฎกับคำขอในไดเรกทอรีรากเท่านั้น
RewriteCond %{REQUEST_FILENAME} -s [หรือ]
RewriteCond %{REQUEST_FILENAME} -l [หรือ]
RewriteCond %{REQUEST_FILENAME} -d
กฎการเขียนซ้ำ ^[^/]+$ - [L]
RewriteRule ^([^/]*)$ index.php?var=$1 [QSA,L]

เดอะ พี.ที ไม่จำเป็นต้องตั้งค่าสถานะในกฎข้อแรก และกลุ่มการจับในกฎข้อแรกก็ไม่บังคับเช่นกัน จุดตัวอักษรใน การแทน สตริงไม่จำเป็นต้องใช้เครื่องหมายแบ็กสแลชหนี

หมายเหตุ: สิ่งนี้จะล้มเหลวในการดำเนินการตามคำขอนั้น จบ ด้วยเครื่องหมายทับ


อย่างไรก็ตาม หากกฎเหล่านี้เป็นเพียงกฎข้อเดียวของคุณที่เกี่ยวข้องกับสิ่งนี้ คุณจะไม่ทำเช่นนั้น ความต้องการ กฎสองข้อ มีเพียงข้อเดียวที่จำเป็น โดยถือว่าเป็นเรื่องปกติสำหรับการร้องขอไปยังรูทเอกสารโดยที่ไม่มี the วาร์ พารามิเตอร์ URL ตัวอย่างเช่น:

DirectoryIndex index.php

RewriteCond %{REQUEST_FILENAME} !-s
RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)$ index.php?var=$1 [QSA,L]

โปรดทราบว่าตรรกะของ เงื่อนไข กลับกัน

ดังที่กล่าวไว้ คำขอสำหรับไดเร็กทอรีรูทนั้นจะถูกส่งผ่านไปยัง index.php (โดย mod_dir) ไม่ใช่ index.php?var=.

tony avatar
ht flag
คำตอบที่ดี ขอบคุณสำหรับคำตอบโดยละเอียด คำถามติดตามผล: จะทำอย่างไรถ้าฉันต้องการดำเนินการตามคำขอที่ลงท้ายด้วยเครื่องหมายทับ ตราบใดที่ไม่มีไดเร็กทอรีนั้น เป็นไปได้ไหม

โพสต์คำตอบ

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