วิธีการตั้งค่า AllowOverride ทั้งหมด


161

ฉันต้องการตั้งค่าAllowOverride allแต่ฉันไม่ทราบวิธีการทำ ฉันพบรหัสต่อไปนี้โดยการค้นหา google และวางใน.htaccess:

<Directory>
        AllowOverride All
</Directory>

แต่หลังจากที่วางมันฉันก็เริ่มได้รับ "Internal Server Error"

ใครช่วยแนะนำฉันที่จะวางรหัสนี้หรือจะทำอย่างไร


3
<Directory>สั่งต้องโต้แย้งเส้นทาง
FKEinternet มี. ค.

คำตอบ:


317

ในกรณีที่คุณอยู่บน Ubuntu ให้แก้ไขไฟล์/etc/apache2/apache2.conf(ที่นี่เรามีตัวอย่าง/var/www):

<Directory /var/www/>
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
</Directory>

และเปลี่ยนเป็น;

<Directory /var/www/>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
</Directory>

แล้ว

sudo service apache2 restart

คุณอาจต้องทำsudo a2enmod rewriteเพื่อเปิดใช้งานการเขียนโมดูลอีกครั้ง


55
ฉันก็ต้องใช้sudo a2enmod rewriteแล้วก็ใช้งานได้ บน Ubuntu 14.04 LTS หวังว่ามันจะเป็นประโยชน์กับบางคน
Jonauz

2
แปลก ... เมื่อฉันทำสิ่งนี้ฉันได้รับข้อผิดพลาดภายในของเซิร์ฟเวอร์ สิ่งนี้บ่งบอกถึงข้อผิดพลาดในไฟล์. htaccess ที่ /var/www/.htaccess หรือไม่ เปลี่ยน apache2 กลับไปที่ AllowOverride None แก้ไขข้อผิดพลาด แต่ไม่อนุญาตให้เขียน URL ซ้ำ
o_O

ใน Ubuntu 12.04 ฉันพบไฟล์นี้ที่ / etc / apache2 / sites-available / path เริ่มต้น
عثمانغني

ฉันจะแทนที่สิ่งนี้จากไฟล์แยกได้อย่างไร? ฉันเห็นว่ามีIncludeOptional conf-enabled/*.confบรรทัดสุดท้ายของapache2.confไฟล์ของฉัน แต่ดูเหมือนว่าapache2.confจะจัดลำดับความสำคัญแทน
JohnnyQ

นี่เป็นเวทย์มนตร์สำหรับฉัน หลังจากอัปเดตเซิร์ฟเวอร์เดเบียน บริษัท ของฉันจากเสียงดังเป็นเจสซีทุกอย่างใน Apache หยุดทำงานและหลังจากเพิ่มสิ่งนี้ทุกอย่างก็เริ่มทำงานอีกครั้ง
periket2000

51

เป้าหมายหลักของAllowOverrideคือสำหรับผู้จัดการไฟล์การกำหนดค่าหลักของ apache (ที่พบใน / etc / apache2 / ส่วนใหญ่) เพื่อตัดสินใจว่าส่วนใดของการกำหนดค่าอาจมีการเปลี่ยนแปลงแบบไดนามิกบนพื้นฐานต่อเส้นทางโดยการใช้งาน

หากคุณไม่ใช่ผู้ดูแลระบบของเซิร์ฟเวอร์คุณขึ้นอยู่กับระดับAllowOverrideที่ผู้ดูแลระบบเหล่านี้อนุญาตให้คุณ เพื่อให้สามารถป้องกันการเปลี่ยนแปลงการตั้งค่าความปลอดภัยที่สำคัญ

หากคุณเป็นผู้จัดการการกำหนดค่า apache หลักคุณควรใช้AllowOverride Noneและถ่ายโอนตัวอย่าง google_based ทั้งหมดที่คุณพบโดยอ้างอิงจากไฟล์. htaccess ไปยังDirectoryส่วนต่างๆในไฟล์การกำหนดค่าหลัก เนื้อหา. htaccess สำหรับ.htaccessไฟล์/my/path/to/a/directoryนั้นเหมือนกับ<Directory /my/path/to/a/directory>คำสั่งยกเว้นว่าการ.htaccessเปลี่ยนแปลงการกำหนดค่าคำขอ HTTP แบบไดนามิกเป็นสิ่งที่ทำให้เว็บเซิร์ฟเวอร์ของคุณช้าลง ชอบการกำหนดค่าแบบสแตติกเสมอโดยไม่มีการ.htaccessตรวจสอบ (และคุณจะหลีกเลี่ยงการโจมตีด้านความปลอดภัยโดย.htaccessการเปลี่ยนแปลง)

โดยวิธีการในตัวอย่างของคุณที่คุณใช้<Directory>และมักจะผิดคำแนะนำของไดเรกทอรีที่มักจะมีเส้นทางเช่น<Directory />หรือหรือ<Directory C:> <Directory /my/path/to/a/directory>และแน่นอนว่าสิ่งนี้ไม่สามารถใส่ใน.htaccessa .htaccessได้เหมือนคำสั่ง Directory แต่ในไฟล์ที่มีอยู่ในไดเรกทอรีนี้ แน่นอนคุณไม่สามารถแก้ไขAllowOverrideใน.htaccessขณะที่คำสั่งนี้จะถูกจัดการระดับความปลอดภัยของ.htaccessไฟล์


17

ไปที่your_severpath/apache_ver/conf/ เปิดไฟล์httpd.confใน Notepad

ค้นหาบรรทัดนี้:

#LoadModule vhost_alias_module modules / mod_vhost_alias.so

ลบสัญลักษณ์แฮช:

LoadModule vhost_alias_module modules / mod_vhost_alias.so

แล้วข้ามไป <Directory />

และเปลี่ยนเป็น:

<Directory />
    Options FollowSymLinks
    AllowOverride All
    Order allow,deny
    Allow from all
</Directory>

จากนั้นรีสตาร์ทเซิร์ฟเวอร์ภายในเครื่องของคุณ


งานเสร็จแล้ว! Ty Sir!
James Walker

6
NB Order allow,denyและAllow from allสำหรับ Apache 2.2และก่อนหน้านี้ ด้วย Apache 2.4 ทั้งสองบรรทัดจะถูกแทนที่ด้วยRequire all grantedดังที่แสดงในคำตอบอื่น ๆ
FKEinternet

13

บน Linux เพื่อผ่อนคลายการเข้าถึงรูทเอกสารคุณควรแก้ไขไฟล์ต่อไปนี้:

/etc/httpd/conf/httpd.conf

และขึ้นอยู่กับระดับไดเรกทอรีที่คุณต้องการผ่อนคลายการเข้าถึงคุณต้องเปลี่ยนคำสั่ง

AllowOverride None

ถึง

AllowOverride All

ดังนั้นสมมติว่าคุณต้องการอนุญาตให้เข้าถึงไฟล์ในไดเรกทอรี / var / www / html คุณควรเปลี่ยนบรรทัดต่อไปนี้จาก:

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

ถึง

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

8
และรีสตาร์ทเซิร์ฟเวอร์หลังจาก
Daniel

หลังจากร้อยครั้งในการตรวจสอบ. htacces ของฉันสองครั้ง - นี่คือทางออก! ขอบคุณมาก. ฉันคิดว่า "all" เป็นค่าเริ่มต้นของการกำหนดค่า apache
Matthias Kleine

นอกจากนี้การกล่าวถึง Linux ในคำตอบของคุณก็ไม่ดีเช่นกัน แม้ว่านี่จะเก่า แต่ฉันก็แค่อยากจะชี้แจงว่าสิ่งที่คุณพูดนั้นสำหรับ
Disthat

11

หากคุณใช้ Linux คุณสามารถแก้ไขรหัสในไดเรกทอรีของ

/etc/httpd/conf/httpd.conf

ตอนนี้ที่นี่หารหัสบรรทัดที่ชอบ

# AllowOverride controls what directives may be placed in .htaccess files.
# It can be "All", "None", or any combination of the keywords:
#   Options FileInfo AuthConfig Limit
#
    AllowOverride None
#
# Controls who can get stuff from this server.
#
    Order allow,deny
    Allow from all

</Directory>

เปลี่ยนค่าAllowOveride None เป็นAllowOveride All

ตอนนี้คุณสามารถตั้งกฎชนิดใดก็ได้ในไฟล์. httacess ภายในไดเรกทอรีของคุณหากระบบปฏิบัติการอื่นเพียงแค่พยายามหาไฟล์httpd.confและแก้ไขมัน


ตั้งแต่ 2558Nov18 1539 PST เมื่อฉันค้นหา 'allowoverride' ของ Google ฉันเห็นกล่องด้านบนผลการค้นหาที่แสดงสิ่งนี้:now here fine the code line kinda like # AllowOverride controls what directives may be placed in .htaccess files. # It can be "All", "None", or any combination of the keywords: # Options FileInfo AuthConfig Limit # AllowOverride None # # Controls who can get stuff from this server. #Sep 11, 2013 apache - How to Set AllowOverride all - Stack Overflow stackoverflow.com/questions/18740419/how-to-set-allowoverride-all
boot13

6

ฉันคิดว่าคุณต้องการตั้งค่าในhttpd.confไฟล์แทนที่จะเป็น.htaccessไฟล์

ฉันไม่แน่ใจว่าคุณใช้ระบบปฏิบัติการแบบใด แต่ลิงก์นี้สำหรับ Ubuntu อาจให้คำแนะนำเกี่ยวกับสิ่งที่ต้องทำ

https://help.ubuntu.com/community/EnablingUseOfApacheHtaccessFiles


5

ตามที่ผู้ใช้รายอื่นได้อธิบายไว้ที่นี่เกี่ยวกับการใช้คำสั่ง allowoveride ซึ่งจะใช้เพื่อให้สิทธิ์ในการใช้. htaccess สิ่งหนึ่งที่ฉันต้องการชี้ให้เห็นว่าไม่เคยใช้ allowoverride ทั้งหมดหากผู้ใช้รายอื่นมีสิทธิ์เข้าถึงเพื่อเขียน. htaccess แทนที่จะใช้ allowoveride แทนอนุญาตโมดูลบางอย่าง

เช่นAllowOverride AuthConfig mod_rewriteแทน

AllowOverride All

เพราะโมดูลเช่น mod_mime สามารถแสดงไฟล์ด้านเซิร์ฟเวอร์ของคุณเป็นข้อความธรรมดา


1
ขอบคุณ!! นี่คือสิ่งที่ฉันกำลังค้นหา ฉันต้องการเปลี่ยนเส้นทาง windwalker.com.au ไปยัง windwanderer.com.au และดังนั้นฉันจึงต้องการอนุญาตคำสั่งนี้ในไฟล์. htaccess และไม่มีอะไรเพิ่มเติม การวาง AllowOverride ALL อย่างมีนัยสำคัญจะช่วยลดความปลอดภัยของเซิร์ฟเวอร์ของฉัน
Jesse the Wanderer Wind

1

ฉันเจอปัญหานี้ด้วยและฉันพบวิธีแก้ปัญหาเป็น 2 ขั้นตอนด้านล่าง: 1. ในโฟลเดอร์ที่เปิดใช้งานไซต์ของ apache2 คุณแก้ไขในองค์ประกอบของไดเรกทอรีโดยตั้งค่า "AllowOverride ทั้งหมด" (ควรเป็น "ทั้งหมด" ไม่ใช่ "ไม่มี") 2 ในโครงการโคฮาน่าในโฟลเดอร์ www เปลี่ยนชื่อ "example.htaccess" เป็น ".htaccess"

ฉันทำมันบน Ubuntu หวังว่ามันจะช่วยคุณ


0

SuSE Linux Enterprise Server

ตรวจสอบว่าคุณแก้ไขไฟล์ที่ถูกต้อง https://www.suse.com/documentation/sles11/book_sle_admin/data/sec_apache2_configuration.html

httpd.conf

ไฟล์กำหนดค่าเซิร์ฟเวอร์ Apache หลัก หลีกเลี่ยงการเปลี่ยนไฟล์นี้ ส่วนใหญ่ประกอบด้วยคำสั่งรวมและการตั้งค่าส่วนกลาง เขียนทับการตั้งค่าส่วนกลางในไฟล์กำหนดค่าที่เกี่ยวข้องที่ระบุไว้ที่นี่ เปลี่ยนการตั้งค่าเฉพาะสำหรับโฮสต์ (เช่นรากเอกสาร) ของคุณในการกำหนดค่าโฮสต์เสมือน

ในกรณีเช่นนี้vhosts.d/*.confจะต้องแก้ไข


0

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

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