Tại sao điều này hoạt động:
RewriteRule (.+)/$ $1
và công việc này:
RewriteRule (.+)/$ $1 [L] #bla bla bla
nhưng điều này không hoạt động:
RewriteRule (.+)/$ $1 #bla bla bla
Tại sao điều này hoạt động:
RewriteRule (.+)/$ $1
và công việc này:
RewriteRule (.+)/$ $1 [L] #bla bla bla
nhưng điều này không hoạt động:
RewriteRule (.+)/$ $1 #bla bla bla
Câu trả lời:
Quy tắc cuối cùng không hoạt động vì các bình luận không thực sự là bình luận. Các chú thích trong htaccess phải bắt đầu bằng dấu #
(phải ở đầu dòng), và không được tùy ý ở bất kỳ đâu.
Trong trường hợp thứ hai, tham số #bla bla bla
được hiểu là tham số thứ 4 của RewriteRule
chỉ thị, chỉ đơn giản là bỏ qua.
Trong trường hợp cuối cùng, tham số #bla bla bla
được hiểu là một tham số thứ 3, trong RewriteRule
trường hợp này là nơi các cờ đi và #bla bla bla
không phải bất kỳ cờ nào mà mod_rewrite hiểu được nên bạn gặp lỗi.
#
phải ở "đầu" của dòng, nhưng nó có thể được đặt trước bất kỳ khoảng trắng nào. (Quá mức) Khoảng trắng trong .htaccess bị bỏ qua và có thể được "rải" ở bất cứ đâu, kể cả ở đầu dòng. Nói cách khác, #
phải là ký tự không có khoảng trắng đầu tiên trên một dòng. Tôi đã từng sai lầm khi nghĩ rằng #
phải là ký tự 1, ở cột ngoài cùng bên trái!
Định dạng tệp cấu hình của Apache (trong đó có .htaccess
tệp là một ví dụ) về mặt kỹ thuật không hỗ trợ nhận xét nội tuyến, chỉ nhận xét toàn dòng (tức là một dòng bắt đầu bằng a #
).
Các dòng bắt đầu bằng ký tự băm "#" được coi là nhận xét và bị bỏ qua. Nhận xét có thể không được bao gồm trên một dòng sau một chỉ thị cấu hình. - Hướng dẫn sử dụng Apache 2.4 chính thức
Tuy nhiên, thật khó hiểu, mỗi mô-đun có thể phân tích cú pháp đầu vào cho các lệnh của nó theo cách mà nó thích - vì vậy hãy mod_rewrite
quyết định xem phải làm gì với bất kỳ dòng nào bắt đầu bằngRewriteRule
Tôi không biết chắc chắn nhưng suy đoán của tôi là điều đó mod_rewrite
đang bỏ qua mọi thứ sau đó [flags]
, và điều đó #
thực sự không cần thiết chút nào.
Tuy nhiên, đặt cược tốt nhất là luôn giữ các bình luận theo dòng riêng của họ, vì điều đó sẽ hoạt động bất kỳ chỉ thị nào bạn đang bình luận.