Bạn có phải khởi động lại apache để các quy tắc viết lại trong .htaccess có hiệu lực không?


98

Tôi đã đẩy tệp .htaccess của mình sang máy chủ sản xuất, nhưng chúng không hoạt động. Khởi động lại có phải là bước tiếp theo không hay tôi nên kiểm tra thứ gì khác.

Câu trả lời:


93

Không cần khởi động lại đối với các thay đổi đối với .htaccess. Có gì đó không ổn.

Đảm bảo rằng .htaccess của bạn bao gồm câu lệnh

RewriteEngine bật

là bắt buộc ngay cả khi nó cũng có trong httpd.conf. Cũng kiểm tra xem .htaccess có thể đọc được bằng quy trình httpd hay không.
Kiểm tra error_log - nó sẽ cho bạn biết bất kỳ lỗi nào trong .htaccess nếu nó đang được sử dụng. Đặt một lỗi cú pháp cố ý trong .htaccess là một cách kiểm tra tốt để đảm bảo tệp đang được sử dụng - bạn sẽ gặp lỗi 500 trên bất kỳ trang nào trong cùng thư mục.

Cuối cùng, bạn có thể bật nhật ký ghi lại bằng các lệnh như sau trong httpd.conf của mình:

RewriteLog "nhật ký / rewritelog"

RewriteLogLevel 7

Do đó, tệp nhật ký được tạo sẽ cung cấp cho bạn chi tiết xương máu về quy tắc viết lại nào phù hợp và cách chúng được xử lý.


3
Đây là một chút lỗi thời. Tôi gặp phải sự cố tương tự và muốn gỡ lỗi các bản viết lại của mình cho một trường hợp sử dụng cụ thể. Tôi đã thử phương pháp này, nhưng sau một chút thất vọng và đào sâu, tôi đã tìm ra vấn đề là gì. Điều này dành cho các phiên bản apache cũ hơn. Đối với apache2.4> thay thế RewriteLog & LogLevel trên với: LogLevel alert rewrite:trace7. Sau khi khởi động lại apache , bạn sẽ thấy các dấu vết trong nhật ký lỗi. Hy vọng điều đó sẽ hữu ích. http://httpd.apache.org/docs/2.4/mod/mod_rewrite.html#logging
Casper Wilkes

52

Không :

Apache cho phép quản lý cấu hình phi tập trung thông qua các tệp đặc biệt được đặt bên trong cây web. Các tệp đặc biệt thường được gọi .htaccess, nhưng bất kỳ tên nào cũng có thể được chỉ định trong chỉ thị AccessFileName ... Vì tệp .htaccess được đọc theo mọi yêu cầu, các thay đổi được thực hiện trong các tệp này có hiệu lực ngay lập tức ...


Nếu bạn đã thêm tên người dùng vào 'Yêu cầu người dùng' trong tệp hỗ trợ trang web của mình, theo kinh nghiệm, tôi thấy rằng bạn cần khởi động lại. Có duyên thì làm được.
Ross

18

Từ tài liệu apache: Thông thường nhất, vấn đề là AllowOverride không được đặt sao cho các lệnh cấu hình của bạn đang được thực hiện. Đảm bảo rằng bạn không có AllowOverride None có hiệu lực đối với phạm vi tệp được đề cập. Một thử nghiệm tốt cho việc này là bỏ rác vào tệp .htaccess của bạn và tải lại. Nếu lỗi máy chủ không được tạo ra, thì bạn gần như chắc chắn có AllowOverride Không có hiệu lực.


1
Đang thả liên kết tới Apache - AllowOverride: httpd.apache.org/docs/2.2/mod/core.html#AllowOverride
scunliffe

2
Tôi thêm dòng này "<directory /> </directory>" vào .htaccess của mình để tạo ra lỗi trong nhật ký. Nó sẽ thông báo "<Thư mục không được phép ở đây" và tôi biết nó đang đọc tệp của tôi.
Mnebuerquo

3

Chỉ khi bạn chưa thêm mô-đun mod_rewrite vào Apache.

Bạn chỉ cần khởi động lại Apache nếu bạn thay đổi bất kỳ tệp Apache ".conf" nào.


2

Tôi gặp vấn đề tương tự và có vẻ như bài đăng của PiedPiper về AllowOverride hữu ích nhất. Kiểm tra tệp httpd.conf của bạn cho "AllowOverride" và đảm bảo rằng tệp được đặt thành Tất cả.



2

Trong trường hợp khởi động lại .htaccess là không cần thiết nếu nó không hoạt động, các lý do có thể bao gồm.

  • AllowOverride Có thể không được đặt mà người dùng có thể đặt bên trong httpd.conf hoặc có thể phải liên hệ với quản trị viên máy chủ.

  • Kiểm tra tên tệp của .htaccess, nó phải là .htaccess chứ không phải htaccess.txt, xem tại đây để biết hướng dẫn cách tạo.

  • Hãy thử sử dụng Options -Indexeshoặc deny allmột loại chỉ thị đơn giản để xem nó có hoạt động hay không.

  • xóa bộ nhớ cache của trình duyệt mọi lúc nếu có quy tắc cho chuyển hướng hoặc tương tự nếu chuyển hướng trước đó được lưu trong bộ nhớ cache, nó sẽ xuất hiện như thể mọi thứ không hoạt động.


0

Có gì trong .htaccess của bạn? Viết lại quy tắc? Kiểm tra xem mod_rewrite đã được cài đặt và kích hoạt chưa.

Những thứ khác? Hãy thử đặt AllowOverride thành 'tất cả' trên thư mục đó.

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.