Score:0

Apache2 mod_rewrite ดูเหมือนจะไม่ได้ทำอะไรเลย

ธง lk

ฉันมีปัญหาในการทำให้ mod_rewrite ทำงานใน Apache2 บน Debian 10 ฉันเปิดใช้งานส่วนขยายด้วย

a2enmod เขียนใหม่
systemctl รีสตาร์ท apache2

และไม่มีข้อผิดพลาดและสามารถดูโมดูลได้

apachectl -M
...
rewrite_module (แชร์)
...

แม้ว่าเมื่อฉันเพิ่มลงใน vhost ของฉันในไซต์ที่มีอยู่

<VirtualHost *:80>
   ServerName default.nothing
   ServerAlias www.default.nothing
   DocumentRoot /var/www/html/public_html/00-default
   <Directory "/volume/dev/html/public_html/00-default">
      Options Indexes FollowSymLinks MultiViews
      AllowOverride All
      Order allow,deny
      Allow from all
      RewriteEngine on
      RewriteRule ^192.168.20.87$ nothing
   </Directory>
   <IfModule mpm_user_module>
      ServerEnvironment apache apache
   </IfModule>
</VirtualHost>

หวังว่ามันจะเขียน url ใหม่ http://192.168.20.87/page.php เป็น http://nothing/page.php ในแท็บเบราว์เซอร์ ไม่ว่าฉันจะใส่อะไรลงใน RewriteRule ก็ดูเหมือนจะไม่มีอะไรเกิดขึ้น ฉันแน่ใจว่าฉันกำลังทำอะไรบางอย่าง

TheLovelySausage avatar
lk flag
ด้วยเหตุผลบางอย่าง ถ้าฉันใช้ .htaccess ก็ใช้งานได้
Gerrit avatar
cn flag
ในการกำหนดค่า vhost คุณต้องใช้ `/` เป็นอักขระตัวแรกของ regex บางครั้งคุณจะเห็น `/?url` regexes ที่ใช้ได้ทั้ง vhost หรือ .htaccess
kz flag
@Gerrit ไม่เมื่อใช้ภายใน `` คอนเทนเนอร์ (เช่น บริบท _directory_) ดังที่แสดงในคำถาม
Score:1
ธง kz
RewriteEngine เปิดอยู่
RewriteRule ^192.168.20.87$ ไม่มีอะไร

ด้วยเหตุผลบางอย่าง ถ้าฉันใช้ .htaccess ก็ใช้งานได้

แม้ว่าสิ่งนี้จะไม่ตรงกับ URL http://192.168.20.87/page.php แม้ว่าคุณ "ทำด้วย .htaccess"ดังนั้นคุณต้องเป็น ทำอย่างอื่น?

กฎข้างต้น (เมื่อใช้ใน <Directory> คอนเทนเนอร์) ตรงกับ URL ของแบบฟอร์ม http://192.168.20.87/192.168.20.87 (หรือ http://default.nothing/192.168.20.87 - หากชื่อโฮสต์ของคุณแก้ไข)

เดอะ เขียนกฎใหม่ ลวดลาย ตรงกับเส้นทาง URL เท่านั้น ไม่ใช่ชื่อโฮสต์ (เช่น 192.168.20.87). ดังนั้นนัดนี้ต่อ /page.php, (หรือ page.php - เส้นทางสัมพัทธ์/ไม่มีเครื่องหมายทับ - เมื่อใช้ใน ไดเรกทอรี บริบทเช่น <Directory> หรือ .htaccess.)

ดังนั้นสิ่งนี้จะต้องเป็นดังนี้:

RewriteRule ^page\.php$ ไม่มีอะไร

(แม้ว่าจะไม่ชัดเจนว่าคุณกำลังพยายามทำอะไรที่นี่ แต่ "ไม่มีอะไร" คืออะไร หากคุณกำลังพยายามเรียกใช้ 404 นี่ไม่ใช่วิธีที่จะทำ)

ตามที่ @Gerrit กล่าวถึงอย่างหลวม ๆ ในความคิดเห็น เมื่อ เขียนกฎใหม่ คำสั่งใช้ใน เซิร์ฟเวอร์ หรือ โฮสต์เสมือน บริบท (เช่น ไม่อยู่ใน <Directory> หรือ .htaccess ตู้คอนเทนเนอร์ - ก ไดเรกทอรี บริบท) จากนั้นเส้นทาง URL ที่จับคู่โดย เขียนกฎใหม่ ไดเร็กทีฟเป็นค่าสัมพัทธ์ของรูท โดยขึ้นต้นด้วยเครื่องหมายทับ เนื่องจากไดเร็กทีฟได้รับการประมวลผลก่อนหน้านี้มาก ก่อนที่จะถูกแมปกับระบบไฟล์ เช่น. ^/หน้า\.php$.


อัปเดต:

DocumentRoot /var/www/html/public_html/00-default
<ไดเรกทอรี "/volume/dev/html/public_html/00-default">

ฉันเพิ่งสังเกตว่าคุณ DocumentRoot และ <Directory> คำสั่งกำลังอ้างอิงตำแหน่งระบบไฟล์ที่แตกต่างกันสองตำแหน่ง! ด้วยข้อมูลที่จำกัดในคำถามนี้ <Directory> คอนเทนเนอร์จะไม่ถูกประมวลผล

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

TheLovelySausage avatar
lk flag
ฉันแค่พยายามทำให้มันล้มเหลว คำถามคือการพยายามให้ mod_rewrite ทำอะไรเลยมากกว่า แต่ฉันทำได้แค่ทำสิ่งต่าง ๆ ด้วย htaccess เท่านั้น
kz flag
@TheLovelySausage คำสั่งที่คุณโพสต์ในตอนแรกจะล้มเหลว - มันจะไม่ทำอะไรเลยเพราะมันจะไม่ตรงกับคำขอ หากคุณมีไฟล์ `.htaccess` ที่มีคำสั่ง mod_rewrite ใด ๆ สิ่งนี้จะลบล้าง `` คอนเทนเนอร์ในการกำหนดค่าเซิร์ฟเวอร์ (จะไม่ทำอะไรเลย) เพื่อชี้แจง คุณกำลังรีสตาร์ท Apache ทุกครั้งที่คุณเปลี่ยนแปลงการกำหนดค่าเซิร์ฟเวอร์ใช่หรือไม่
kz flag
@TheLovelySausage ฉันเพิ่งสังเกตเห็นว่า `DcoumentRoot` และ `` คำสั่งอ้างอิงตำแหน่งระบบไฟล์ที่แตกต่างกันสองตำแหน่ง?! ในการกำหนดค่าที่คุณโพสต์ จะหมายถึง `` คอนเทนเนอร์จะไม่ถูกประมวลผล ฉันได้อัปเดตคำตอบแล้ว (คุณวางไฟล์ `.htaccess` ไว้ที่ไหน)

โพสต์คำตอบ

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