Đây có phải là cách chính xác để kích hoạt htaccess trong Apache 2.4.7


46

Trong hầu hết mọi giải pháp của "Cách kích hoạt htaccess", họ nói rằng tập tin / etc / apache2 / sites-Available / default cần phải được chỉnh sửa. Nhưng không có tệp như vậy trong Apache 2.4.7

Tôi đọc ở đâu đó rằng tập tin mặc định mới là 000-default.conf. Vì vậy, tôi đã chỉnh sửa nó và cố gắng thêm dòng:

AllowOverride All

Nhưng Apache2 đã không khởi động lại chính xác và báo lỗi. Từ một tài liệu apache2, tôi thấy rằng AllowOverride chỉ được phép trong <Directory>phần này. Sau đó, tôi đã thử thêm điều này:

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

Và điều này dường như làm việc. Nhưng tôi không chắc là tôi có nên đặt / var / www ở đó không. Đây có phải là một cách làm đúng hay máy tính của tôi sẽ nổ tung bằng cách nào đó?


xem cái này Nó có thể giúp bạn. stackoverflow.com/questions/33062142/ từ
Avarn alok

Câu trả lời:


58

tl; dr

Vâng, đó là cách chính xác.
Nhưng để có ngữ nghĩa hơn : Vâng, đó là cách chính xác để cho phép .htaccessghi đè tất cả các lệnh trong /var/wwwthư mục.


Như bạn phát hiện ra, AllowOverridechỉ được phép dưới Directoryphần.

Sử dụng ví dụ của bạn:

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

Điều này nói với apache, rằng tất cả các cấu hình có thể được ghi đè trong /var/wwwvà tất cả các thư mục con của nó (đệ quy).


Để có một ví dụ tốt hơn, hãy xem xét bạn có cấu hình sau trong máy chủ ảo của mình:

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

<Directory "/var/www/uploads">
    AllowOverride Limit
</Directory>

Và cấu trúc thư mục sau:

var/
    www/
        .htaccess
        uploads/
            .htaccess
            a/
                .htaccess
            b/
                .htaccess
        code/
            .htaccess
            c/
                .htaccess
            d/
                .htaccess

Những gì tôi đã làm ở đây, là tạo một .htaccesstrong mọi thư mục con của /var/wwwthư mục.
Nó thường không nên như vậy, nhưng đây chỉ là vì ví dụ

So sánh cấu trúc thư mục với cấu hình, có nghĩa là tất cả .htaccesscác tệp bên trong /var/wwwthư mục và thư mục con của nó, ngoại trừ thư mục và thư mục con của nó /var/www/uploads, có thể ghi đè tất cả các loại lệnh.

Nhưng /var/www/uploadsvà thư mục con của nó chỉ có thể sử dụng các .htaccesstập tin để ghi đè lên Allow, DenyOrderchỉ thị.

Lưu ý: Kể từ apache 2.4 (có sẵn theo mặc định trong 13.10+) Allow, DenyOrdercác lệnh được thay thế bằng một lệnh duy nhất có tên Require.


39

Đầu tiên cho phép viết lại bằng lệnh này:

sudo a2enmod rewrite

Sau đó khởi động lại apache2:

sudo service apache2 restart

Sau đó vào sites-availablethư mục:

/etc/apache2/sites-available

Chỉnh sửa tập tin được đặt tên defaultvà thay đổi AllowOverride nonethành AllowOverride All. Có hai dòng thay đổi này phải được thực hiện.

Điều này sẽ làm .htaccessviệc trong VPS máy chủ của bạn.

Điều này hoạt động trên VPS Ubuntu 12.04.5.


3
không có tệp nào được đặt tên mặc định - nhưng có một tệp có tên 000-default.conf
Tahir Yasin

1
+1 để nhắc nhở cho phép viết lại, tôi đã bỏ lỡ điều này và không thể hiểu tại sao nó không hoạt động sau khi làm tất cả mọi thứ.
Abdul Man Nam

Nhận xét này đề cập đến cấu hình của Apache 2.2, không phải 2.4. Trong 2.4, defaulttệp được gọi 000-default.confvà nó không chứa AllowOverride Nonedòng.
ben_nuttall

tập tin này 000-default.confvà không thể thêm AllowOverride Nonevào đây, nếu bạn tải lại lỗi apache
Kreker

Nếu tất cả những gì bạn cần là cho phép ghi đè các lệnh mod_rewrite .htaccess, tốt hơn là sử dụng AllowOverride FileInfo. Mặc dù FileInfo đã bao gồm một tập hợp lớn các lệnh, bạn vẫn sẽ hạn chế rất nhiều lệnh bị ghi đè.
Dan

3

Trong trường hợp của tôi, nó hoạt động như thế này:
Tôi đã phải thêm các dòng sau:

Order allow, deny
Allow from all

Vì vậy, nó trông như thế này:

<Directory /var/www/>
    Options Indexes FollowSymLinks
    AllowOverride All
    Order allow,deny
    allow from all
</Directory>

Mặc dù điều này có thể đã khắc phục vấn đề của bạn, nhưng nó không liên quan đến câu hỏi mà OP có. Thứ tự và cho phép các chỉ thị là các chỉ thị trong apache2.2 trở về trước. Chúng được sử dụng để cho phép / từ chối truy cập vào người dùng trên các thư mục nhất định. Chúng không có bất kỳ tác động nào đến việc các lệnh trong tệp .htaccess có được phân tích cú pháp hay không.
Dan

2

Dưới đây là đoạn trích cách bật htaccess trong Apache 2.4 mà không thay đổi cấu hình mặc định:

cat <<EOF> /etc/apache2/conf-available/allow-override.conf
<Directory "/var/www">
    AllowOverride all
</Directory>
EOF

a2enconf allow-override
service apache2 reload
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.