Nhiều người đăng có vấn đề gỡ lỗi các câu lệnh RewriteRule và RewriteCond trong .htaccess
tệp của họ . Hầu hết trong số này đang sử dụng dịch vụ lưu trữ chia sẻ và do đó không có quyền truy cập vào cấu hình máy chủ gốc. Họ không thể tránh sử dụng .htaccess
các tệp để viết lại và không thể kích hoạt RewriteLogLevel "như nhiều người trả lời đề xuất. Ngoài ra, có nhiều .htaccess
cạm bẫy và hạn chế cụ thể không được bảo vệ tốt. .
Vì vậy, câu hỏi của tôi ở đây là làm thế nào chúng tôi khuyên họ nên tự gỡ lỗi các quy tắc của mình . Tôi cung cấp một vài gợi ý dưới đây. Các đề xuất khác sẽ được đánh giá cao.
Hiểu rằng công cụ mod_rewrite quay vòng qua
.htaccess
các tệp . Động cơ chạy vòng lặp này:do execute server and vhost rewrites (in the Apache Virtual Host Config) find the lowest "Per Dir" .htaccess file on the file path with rewrites enabled if found(.htaccess) execute .htaccess rewrites (in the user's directory) while rewrite occurred
Vì vậy, các quy tắc của bạn sẽ được thực thi nhiều lần và nếu bạn thay đổi đường dẫn URI thì nó có thể sẽ thực thi các
.htaccess
tệp khác nếu chúng tồn tại. Vì vậy, hãy chắc chắn rằng bạn chấm dứt vòng lặp này, nếu cần bằng cách thêmRewriteCond
vào để dừng quy tắc bắn. Đồng thời xóa mọi.htaccess
quy tắc viết lại cấp thấp hơn trừ khi có ý định rõ ràng sử dụng quy tắc đa cấp.Đảm bảo rằng cú pháp của mỗi Regapi là chính xác bằng cách kiểm tra một tập các mẫu thử nghiệm để đảm bảo rằng đó là một cú pháp hợp lệ và thực hiện những gì bạn dự định với một phạm vi URI thử nghiệm đầy đủ. Xem câu trả lời dưới đây để biết thêm chi tiết.
Xây dựng quy tắc của bạn tăng dần trong một thư mục thử nghiệm. Bạn có thể sử dụng "thực thi
.htaccess
tệp sâu nhất trên tính năng đường dẫn" để thiết lập một thư mục thử nghiệm riêng biệt (cây) và gỡ lỗi các quy tắc ở đây mà không làm hỏng các quy tắc chính của bạn và ngăn trang web của bạn hoạt động. Bạn phải thêm từng cái một vì đây là cách duy nhất để bản địa hóa các thất bại theo các quy tắc riêng lẻ.Sử dụng một đoạn mã giả để loại bỏ các biến môi trường và máy chủ . (Xem Liệt kê 2 ) Nếu ứng dụng của bạn sử dụng, giả sử,
blog/index.php
sau đó bạn có thể sao chép ứng dụng này vàotest/blog/index.php
và sử dụng nó để kiểm tra các quy tắc blog của bạn trongtest
thư mục con. Bạn cũng có thể sử dụng các biến môi trường để đảm bảo rằng công cụ viết lại trong việc diễn giải các chuỗi thay thế một cách chính xác, vdRewriteRule ^(.*) - [E=TEST0:%{DOCUMENT_ROOT}/blog/html_cache/$1.html]
và tìm kiếm các biến REDIRECT_ * này trong kết xuất phpinfo. BTW, tôi đã sử dụng cái này và phát hiện ra trên trang web của mình rằng tôi phải sử dụng
%{ENV:DOCUMENT_ROOT_REAL}
thay thế. Trong trường hợp các vòng lặp chuyển hướng REDIRECT_REDIRECT_ * liệt kê các biến trước đó. Vân vân..Đảm bảo rằng bạn không bị cắn bởi bộ nhớ cache trình duyệt 301 không chính xác . Xem câu trả lời dưới đây . Tôi cảm ơn Ulrich Palha vì điều này.
Công cụ viết lại có vẻ nhạy cảm với các quy tắc xếp tầng trong một
.htaccess
ngữ cảnh, (đó làRewriteRule
kết quả của một sự thay thế và điều này rơi vào các quy tắc tiếp theo), vì tôi đã tìm thấy các lỗi với các yêu cầu phụ nội bộ (1) và xử lý PATH_INFO không chính xác thường có thể xảy ra được ngăn chặn bằng cách sử dụng các cờ [NS], [L] và [PT].
Bất kỳ bình luận hoặc đề nghị thêm?
Liệt kê 1 - phpinfo
<?php phpinfo(INFO_ENVIRONMENT|INFO_VARIABLES);