วิธีการเปิดใช้งาน mod_rewrite ใน Apache


164

ฉันเพิ่งติดตั้ง LAMP stack บนระบบ Ubuntu ของฉัน

การเปลี่ยนเส้นทางไม่ทำงานสำหรับฉัน ฉันไม่รู้จะแก้ไขได้อย่างไร มีใครช่วยฉันบ้าง


3
IMHO คำถามนี้ไม่ได้เฉพาะเจาะจง Ubuntu และควรจะย้ายไปยังเซิร์ฟเวอร์ของความผิดพลาด
เปาโล

2
หลอดไฟ OP ที่ติดตั้งบน UBUNTU คุณต้องการอูบุนตูมากแค่ไหน?
วอยซ์

1
@wojov: ฉันไม่รู้เกี่ยวกับกรณีนี้ แต่อาร์กิวเมนต์นั้นใช้งานไม่ได้ "ฉันจะใช้แอปพลิเคชันนี้ (บน Ubuntu) ได้อย่างไร" ส่วนใหญ่นอกหัวข้อ

23
นี่ไม่ใช่ "ฉันจะใช้แอปพลิเคชันได้อย่างไร" แต่เป็น "วิธีเปิดใช้งานคุณลักษณะเฉพาะใน Ubuntu" Apache ภายใต้ Ubuntu ใช้โครงร่างการกำหนดค่าที่แตกต่างกันซึ่งแต่ละโมดูลและโฮสต์เสมือนเป็นไฟล์/etc/apache2และสามารถเปิดใช้งานได้โดยใช้a2*โปรแกรม
Lekensteyn

คุณควรอธิบายถึงสิ่งที่คุณทำเพื่อ จำกัด ปัญหาให้แคบลง
ริ

คำตอบ:


238

หากต้องการเปิดใช้งานโมดูลเขียนใหม่ให้เรียกใช้ "apache2 เปิดใช้งานโมดูลเขียนใหม่":

sudo a2enmod rewrite

คุณต้องรีสตาร์ทเว็บเซิร์ฟเวอร์เพื่อใช้การเปลี่ยนแปลง:

sudo service apache2 restart

หากคุณวางแผนที่จะใช้ mod_rewrite ใน.htaccessไฟล์คุณต้องเปิดการใช้งานของ.htaccessไฟล์โดยการเปลี่ยนไปAllowOverride None AllowOverride FileInfoสำหรับเว็บไซต์เริ่มต้นให้แก้ไข/etc/apache2/sites-available/default:

    <Directory /var/www/>
            Options Indexes FollowSymLinks MultiViews
            # changed from None to FileInfo
            AllowOverride FileInfo
            Order allow,deny
            allow from all
    </Directory>

หลังจากการเปลี่ยนแปลงดังกล่าวคุณต้องเริ่ม Apache ใหม่อีกครั้ง


18
ฉันประสบความสำเร็จมากขึ้นกับ AllowOverride All
Valentin Despa

ขอบคุณ! sudo a2enmod rewriteและFileInfoแก้ไขให้ฉัน!
d -_- b

22
สำหรับฉันไฟล์นั้นคือ /etc/apache2/apache2.conf ที่ฉันพบว่ารายการ config
doc_id

ใช่ทำการเปลี่ยนแปลงทั้งสองแบบเพื่อแก้ไขปัญหา
Adelin

มันไม่ทำงานสำหรับฉัน ฉันโพสต์คำถามที่นี่askubuntu.com/questions/809619/failing-to-rewrite-url
Suhail Gupta

49

ฉันกล้าที่จะเพิ่มคำตอบพิเศษ (เป็นผลการติดตามคำตอบที่ดีข้างต้น) เกี่ยวกับUbuntu 14.04และ.htaccess:

ใน 14.04 ชื่อของไฟล์กำหนดค่าเริ่มต้นจะเปลี่ยนเป็น000-default.conf:

sudo gedit /etc/apache2/sites-available/000-default.conf

เพิ่มต่อไปนี้ในตอนท้ายของไฟล์:

<Directory "/var/www/html">
    AllowOverride All
</Directory>

ด้วยเหตุผลบางอย่างในอูบุนตู 14.04 และ apache2 /www/htmlรากมีการตั้งค่า หากคุณต้องการเปลี่ยนรากเว็บเซิร์ฟเวอร์กลับไปที่เก่าที่ดี/www, open 000-default.confและการเปลี่ยนแปลง

DocumentRoot /var/www/html/

ไปยัง

DocumentRoot /var/www/

แล้วนอกหลักสูตรควรจะเป็น

<Directory "/var/www">
    AllowOverride All
</Directory>

1
ขอบคุณสำหรับข้อมูล! วิธีนี้ / ใหม่ที่เราสามารถใช้ www เป็นโฟลเดอร์ที่เราใส่ทุกเว็บไซต์และ html นั้นเป็นค่าเริ่มต้น "เว็บไซต์" สำหรับ localhost อาจมีความสำคัญหากคุณกำลังเล่นกับการเปิดพอร์ตสู่โลก - ด้วยวิธีนี้ localhost ของคุณจะไม่เห็นโฟลเดอร์ของโครงการอื่น ๆ
Vladimir Vukanac

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