ความยาวสูงสุดของ URL 257 ตัวอักษรสำหรับ mod_rewrite?


12

แบบแผน URL ของฉันคือ /foo/var1-var2-var3.../bar

ฉันใช้กฎ mod_rewrite เหล่านี้:

RewriteBase /foo/
RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^ index.php [PT,L]

หากความยาวของสตริง 'var1-var2 ... ' มากกว่า 257 ตัวอักษรแสดงว่าข้อผิดพลาด 403 ต้องห้ามและส่งคืน 404 อย่างไรก็ตามหากความยาวของสตริง 'var1-var2 ... ' คือ 257 ตัวอักษรหรือน้อยกว่าและตามด้วยสแลชความยาวของ url ที่เหลืออาจยาวเท่าใดก็ได้ เราจะเอาชนะขีด จำกัด นี้ได้อย่างไร

คำตอบ:


12

คุณกำลังทำงานภายใต้ข้อ จำกัด ของระบบไฟล์พื้นฐาน

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

ด้วย Apache หากคุณวางกฎเช่นนี้ไว้ในไฟล์. htaccess มันสายเกินไปที่จะแก้ไขปัญหา Apache จะพยายามจัดทำชื่อไฟล์แบบยาวแล้วจึงโยนข้อผิดพลาดของระบบไฟล์ '(36) ชื่อไฟล์ยาวเกินไป' กลับมาเป็นข้อผิดพลาด 403

ฉันเห็นสองตัวเลือก:

  1. เปลี่ยนรูปแบบ URL ของแอปพลิเคชันของคุณเป็นสูงสุด 255 อักขระระหว่างเครื่องหมายทับแต่ละอัน
  2. ย้ายกฎการเขียนซ้ำลงในการกำหนดค่าโฮสต์เสมือน apache และลบ REQUEST_FILENAME

หากไฟล์. htaccess ไม่รวม {REQUEST_FILENAME} แต่ยังส่งคืน 403 นี่อาจเป็นปัญหาหรือไม่ ( serverfault.com/questions/140852/… )
philfreo

1
คุณต้องย้ายกฎการเขียนซ้ำไปยังการตั้งค่า apache นี่เป็นวิธีเดียวที่จะรักษาฟังก์ชันการทำงานและแก้ไขปัญหา
h0tw1r3

3
เมื่อย้ายกฎจาก .htaccess เพื่อ Apache config ของโฮสต์เสมือนคุณจะต้องมีการเปลี่ยนแปลง%{REQUEST_FILENAME}=> %{DOCUMENT_ROOT}%{REQUEST_FILENAME}และยังเพิ่มเฉือนจุดเริ่มต้นของรูปแบบ URL ของคุณเช่นไม่ได้แต่RewriteRule ^abc ... RewriteRule ^/abc ...คุณต้องรักความตรงไปตรงมาของ mod_rewrite ...
ash108

2
"ย้ายกฎการเขียนซ้ำลงใน apache virtual host config" เป็นสีทอง: มันใช้งานได้จริงเมื่อใช้งานอย่างถูกต้องซึ่งแตกต่างจากวิธีแก้ปัญหาอื่น ๆ ที่ฉันได้ลอง
ash108
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.