Apache .htaccess <ถ้าโมดูลไม่ได้รับอนุญาตที่นี่


13

ใช้ Apache บน Ubuntu แม่นยำด้วย PHP 5.5

พยายามเข้าถึงของฉันvar/www/ให้ฉัน 500

/var/log/apache2/error.log

แสดงให้เห็นว่า:

/var/www/web/.htaccess: <IfModule not allowed here

. htacess ของฉันคือ:

DirectoryIndex app.php


<IfModule mod_rewrite.c>
    RewriteEngine On

    RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.*)::\2$
    RewriteRule ^(.*) - [E=BASE:%1]

    RewriteCond %{ENV:REDIRECT_STATUS} ^$
    RewriteRule ^app\.php(/(.*)|$) %{ENV:BASE}/$2 [R=301,L]

    RewriteCond %{REQUEST_FILENAME} -f
    RewriteRule .? - [L]

    RewriteRule .? %{ENV:BASE}/app.php [L]
</IfModule>

<IfModule !mod_rewrite.c>
    <IfModule mod_alias.c>       
        RedirectMatch 302 ^/$ /app.php/       
    </IfModule>
</IfModule>

เป็นของฉัน apache.conf ฉันเพิ่ม:

<Directory />
AllowOverride ALL
</Directory>

และมันก็ทำงานได้หลังจากที่ฉันรีสตาร์ท apache

คำตอบ:


25

คุณต้องกำหนดค่า apache ของคุณเพื่อเปิดใช้งานการกำหนดค่าจากไฟล์. htaccess ดังนั้นในส่วนไดเรกทอรีให้แน่ใจว่าคุณมีตัวเลือก

Allowoverride ALL 

สำหรับข้อมูลข้อมูลเพิ่มเติมเพิ่มเติมเกี่ยวกับAllowOverride

ในการตั้งค่าของคุณหากคุณใช้ mod_rewrite บางทีคุณสามารถตั้งค่าเฉพาะ FileInfo ฉันจะตั้งค่าพารามิเตอร์ตัวเลือกเป็น SymLinksIfOwnerMatch เสมอเพื่อให้สามารถเปลี่ยนเส้นทางไปยังไซต์อื่น ๆ ได้

Allowoverride FileInfo 
Options SymLinksIfOwnerMatch

ฉันหวังว่ามันจะช่วยถ้าคุณตั้งค่าการกำหนดค่านี้แล้วโปรดเพิ่มข้อมูลด้วยการกำหนดค่า virtualhost ของคุณ


นี่คือการติดตั้งใหม่ของ Apache ฉันไม่มีส่วน <Directory /> ใน apache2.conf ฉันได้เพิ่มการอัปเดตของฉันด้านบน ขอบคุณ
Kiksy

ฉันลืมรีสตาร์ท Apache นั่นทำงานตอนนี้
Kiksy

1
ในตอนท้ายของฉันฉันมีDirectoryคำสั่งที่ขาดหายไป เมื่อเพิ่มเข้ามามันจะทำงานอย่างถูกต้อง ฉันคิดว่านี้เป็นของใหม่ในรุ่น 2.4 ของ Apache เพราะมันใช้ในการทำงานร่วมกับ 2.2 ...
อเล็กซิส Wilke

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