2013-01-19 61 views
10

Vấn đề của tôi là tệp .htaccess trên máy chủ cục bộ của tôi không được đọc. Các cài đặt trong tệp VirtualHost dường như luôn được ưu tiên.Cách nhận các tệp .htaccess hoạt động với Apache VirtualHost

Tôi đã thử những điều sau đây:

  • Enabled mod_rewrite
  • Thay đổi AllowOverride để All nhưng điều này gây ra một HTTP Error 500 Internal server error. Tôi đã thử nó với các tùy chọn khác nhau nhưng nó luôn luôn gây ra một lỗi 500.

Tôi đang sử dụng một tập tin VirtualHost trên Ubuntu trông giống như sau:

<VirtualHost *:80> 
ServerAdmin [email protected] 

DocumentRoot /web/website 
<Directory /> 
    Options FollowSymLinks 
    AllowOverride None 
</Directory> 
<Directory /web/website> 
    Options Indexes FollowSymLinks MultiViews 
    AllowOverride None 
    Order allow,deny 
    allow from all 
</Directory> 
</VirtualHost> 

Trong file .htaccess tôi dưới /web/website tôi có các quy tắc sau (mà không được đọc):

RewriteEngine On 
RewriteCond %{SCRIPT_FILENAME} !-d 
RewriteCond %{SCRIPT_FILENAME} !-f 
RewriteRule ^(.*)$ index.php?/$1 [L] 
RewriteCond %{HTTP_USER_AGENT} ^facebookexternalhit 
RewriteRule ^(.*)$ ogtags.php?$1 [L,QSA] 
ErrorDocument 404 /404 
ErrorDocument 401 /401 

Một điều tôi đã thử đã làm việc là gắn các quy tắc này trực tiếp vào tệp VirtualHost, nhưng tôi muốn tệp .htaccess của tôi hoạt động! Đó có phải là một yêu cầu lớn như vậy không? :(

Edit:..? Vì vậy, tôi nhìn vào apache tôi error.log và nó nói Invalid command 'Action', perhaps misspelled or defined by a module not included in the server configuration đề cập đến tập tin .htaccess tôi Có vẻ như không phải là một module gọi là hành động mà tôi có thể kích hoạt Bất kỳ ý tưởng

chỉnh sửa 2: tôi nhận thấy rằng tập tin httpd.conf của tôi là trống nên vấn đề này kể từ khi tôi đang sử dụng VirtualHost file

+0

Tôi đã thử nhận xét ra các quy tắc đó, nhưng có vẻ như chúng không gây ra sự cố. Bất cứ một đề nghị nào khác? Tôi nghĩ rằng bạn là đúng mặc dù, nó phải là một trong những quy tắc đó là sai. Tôi thậm chí đã cố gắng bình luận ra tất cả các quy tắc và một lần nữa nó không có hiệu lực! Vì vậy, tôi không biết những gì khác để thử! –

+0

Hmm nhưng các quy tắc này hoạt động tốt trên máy chủ trực tiếp, bao gồm cả 404. Vì vậy, phải có cái gì khác trong thiết lập apache địa phương của tôi đó là sai. –

+0

'' httpd.conf'' có nghĩa là thêm cấu hình người dùng và nó được bao gồm trong tệp 'apache2.conf''. Nó được để trống theo mặc định. – cyberhicham

Trả lời

6

Sau khi xem xét apache tôi error.log tôi nhận ra tôi chỉ phải kích hoạt các module Apache actions:

sudo hành động a2enmod

Và không còn 500 lỗi máy chủ nội bộ nữa!

Hy vọng điều này sẽ giúp ai đó xuống dòng :)

1

Bạn bỏ lỡ thị RewriteBase /

.?

Thêm nó sau khi chỉ thị RewriteEngine:

RewriteEngine On 
RewriteBase/
+0

Điều này không thay đổi bất cứ điều gì, vẫn nhận được 'Lỗi HTTP 500 Máy chủ nội bộ': ( –

+2

kiểm tra nhật ký thường trong' '/ var/log/apache2/error.log'' – cyberhicham

+0

Cảm ơn! –