.htaccess bị bỏ qua ngay cả khi Virtualhost có dịch vụ cho phép


25

Tôi đang chạy một máy chủ LAMP trên Fedora 13 đang hoạt động tốt; tuy nhiên, tôi vừa thêm một tệp ".htaccess" vào thư mục docroot của trang hiện tại đang bị bỏ qua hoàn toàn.

Tôi đã thử một nửa tá các thử nghiệm khác nhau, bao gồm cả thử nghiệm này:

RewriteEngine on
RewriteBase /

RewriteRule ^.*$ index.php

Nhưng hình ảnh và tất cả các trang khác tải tốt và các tệp không tồn tại vẫn còn 404. Tôi cũng đã thử điều này:

order deny,allow
deny from all

Nhưng mỗi trang vẫn tải tốt. Một lần nữa, tập tin .htaccess đơn giản là bị bỏ qua 100%.

Chúng tôi đặt các bản ghi virtualhost của chúng tôi trong /etc/httpd/conf.d/virtual.conf. Nó trông như thế này:

NameVirtualHost *

<VirtualHost *>
    ServerName              intranet
    DocumentRoot            /var/www/default
    <Directory "/var/www/default">
        Options FollowSymLinks
        AllowOverride All

        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

<VirtualHost *>
    ServerName              ourwebsite.com
    DocumentRoot            /var/www/html/ourwebsite.com/docroot
    <Directory "/var/www/html/ourwebsite.com/docroot">
        Options FollowSymLinks
        AllowOverride All

        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

Điều gì khác có thể khiến máy chủ của chúng tôi hoàn toàn IGNORE .htaccesstệp ??

Chỉnh sửa:

Tôi đã thay đổi tệp .htaccess thành ở trên để chứng minh rõ hơn rằng những thay đổi của tôi đang bị bỏ qua. Lưu ý rằng tôi đã thử chính xác tệp .htaccess trên máy chủ sản xuất và nó hoạt động tốt.

Chỉnh sửa 2:

OK, tôi có thông tin mới! Chỉ với mục đích thử nghiệm, tôi đã thực hiện và thay đổi tạm thời MỌI chỉ thị "AllowOverride" AllowOverride All. Tôi phát hiện ra rằng mục nhập Thư mục đầu tiên dường như áp đảo tất cả những người khác:

<Directory />
    Options FollowSymLinks
    AllowOverride None
</Directory>

Khi tôi thay đổi thành AllowOverride All, các tệp .htaccess của tôi bắt đầu có hiệu lực. Nó giống như tất cả các AllowOverride Allchỉ thị khác trong tập tin cấu hình của tôi đang bị bỏ qua!

Đưa cái gì??

Câu trả lời:


32

Không thể tin được. Hãy nhớ làm thế nào tôi nói đây là một máy chủ phát triển? Vâng .. đây là mục nhập máy chủ ảo của tôi THỰC SỰ trông như thế nào:

<VirtualHost *>
    ServerName              dev.ourwebsite.com
    DocumentRoot            /var/www/html/dev.ourwebsite.com/docroot
    <Directory "/var/www/html/ourwebsite.com/docroot">
        Options FollowSymLinks
        AllowOverride All

        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

Bạn có nhìn thấy nó không? Vâng, tôi đã không. I FORGOT Để thay đổi mục nhập "Danh mục" của tôi thành dev.ourwebsite.com thay vì ourwebsite.com - và điều đó đã tạo ra sự khác biệt. Tôi chỉ cho rằng Apache sẽ gây ra lỗi nếu thư mục không tồn tại; nhưng điều đó chỉ áp dụng cho chỉ thị DocumentRoot. là dựa trên kết hợp - có nghĩa là nó áp dụng các quy tắc nếu nó phù hợp với yêu cầu đến, nhưng nếu không, nó không quan tâm nếu bạn nói với AllowOverride trên các kỳ lân ma thuật.

Hãy để điều này là một bài học cho bất kỳ ai khác tìm kiếm - khi tất cả những thứ khác thất bại, hãy xem xét Typo toàn năng.


Tôi chưa bao giờ trong một triệu năm sẽ bắt được điều này! Tôi cũng có một lỗi đánh máy trong đường dẫn Directory, cũng là một dự án dev ... Cảm ơn vì đã mở mắt.
gillytech

Tôi cũng có một lỗi đánh máy trong phần thư mục. Thực sự, điều này rất bực bội. Đó là một phước lành mà tôi đã đi qua điều này và nhận ra thực tế rằng tôi có thể phạm sai lầm siêu ngớ ngẩn.
Akash Kumar Sharma

Tôi biết đã 7 năm rồi, nhưng tôi chỉ muốn tham gia và nói câu trả lời này chỉ giúp tôi. Đó là cùng một loại điều. Tôi đã sao chép các chỉ thị từ một máy chủ ảo khác và thay đổi bit sai. Cảm ơn đã chia sẻ thông tin này! Lướt một cách khôn ngoan.
cá heo

5

Kiểm tra xem có bất kỳ "AllowOverride none" nào khác được trình bày trong 'httpd.conf' phía trên khai báo virtualhost không. Có thể, bạn có "AllowOverride none" trong docroot.


Máy chủ tôi đang làm việc là một máy chủ phát triển và nó là một bản sao chính xác của máy chủ sản xuất của chúng tôi. Các tập tin httpd.conf thực tế giống hệt nhau. Sự khác biệt đáng kể DUY NHẤT là "virtual.conf" của chúng tôi trên máy chủ này có ít mục nhập hơn và mỗi trang web có tiền tố dev.. Tuy nhiên, máy chủ sản xuất hoạt động tốt, các tệp .htaccess hoạt động chính xác như mong đợi và máy chủ phát triển chỉ đơn giản bỏ qua tệp .htaccess hoàn toàn.
Brian Lacy

0

Ba dự đoán:

Có thực sự có một không gian sau dấu phẩy trong dòng order deny, allowtrong .htaccess? Apache không như thế. Đối với tôi trên F13 tôi đã nhận được 500s.

Bạn có AccessFileNamechỉ thị ở bất cứ đâu không?

Nếu bạn đang sử dụng selinux, bạn có bối cảnh chính xác cho tệp ( ls -lZ) không?


Tôi không nhận được 500 lỗi. Tệp .htaccess đơn giản là bị bỏ qua. Và tôi đã xác minh rằng dù sao tôi cũng không có chỗ trống. Tôi không biết gì về selinux hoặc bối cảnh, nhưng tôi đã tìm cách kiểm tra và dường như nó bị Vô hiệu hóa. Về phần AccessFileNametôi sẽ nhìn xung quanh, nhưng như tôi đã nói trong nhận xét của mình về câu trả lời của Denis, cấu hình apache cho hai máy chủ này hoàn toàn giống nhau.
Brian Lacy

Tôi cũng có vấn đề với không gian. Nó làm tôi phát điên.
egorgry

Rất tiếc, sửa: Tôi có một lệnh AccessFileName trong httpd.conf của tôi. Nó đọc như sau:AccessFileName .htaccess
Brian Lacy

0

Tôi đã có điều này trên một máy chủ mới, cuối cùng nhận ra rằng mod viết lại không được bật theo mặc định.

ln -s /etc/apache2/mods-available/rewrite.load /etc/apache2/mods-enabled/rewrite.load
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.