2009-05-08 18 views
5

Có vấn đề với regex thích hợp cho RewriteCondLàm cách nào để đối sánh các thư mục con trong RewriteCond?

RewriteCond %{REQUEST_URI} !^/foo/ 

trình như mong đợi, có nghĩa là, không áp dụng sau đây viết lại để tất cả các URL bắt đầu bằng/foo /.

RewriteCond %{REQUEST_URI} !^/foo/bar/ 

Mặt khác không hoạt động như tôi mong đợi. Các URL bắt đầu bằng/foo/bar/vẫn đang được viết lại.

Làm cách nào để nhập regex phù hợp để loại trừ các thư mục con?

+0

Làm thế nào để các quy tắc thực tế tìm kiếm như? – Gumbo

+0

Nó sẽ hoạt động. Bạn có thể thiết lập một RewriteLog với một RewriteLogLevel của ít nhất 3 và thêm nó vào câu hỏi của bạn? –

Trả lời

7

Có thể đó là URL mới của chuyển hướng nội bộ mà quy tắc được áp dụng cho. L flag thực hiện điều đó.

[...] nếu RewriteRule tạo ra một chuyển hướng nội bộ (trong đó thường xuyên xảy ra khi viết lại trong một bối cảnh cho mỗi thư mục), điều này sẽ reinject yêu cầu và sẽ gây ra chế biến phải được lặp lại bắt đầu từ RewriteRule đầu tiên.

Nếu bạn muốn chắc chắn rằng đường dẫn URL ban đầu đã không bắt đầu với “/ foo/bar”, đánh dấu vào request line (xem THE_REQUEST variable) thay vì:

RewriteCond %{THE_REQUEST} !^[A-Z]+\ /foo/bar/ 
RewriteRule … 
+0

Không biết làm thế nào và tại sao nhưng điều này làm việc – edgars

+0

@Gumbo: bạn có thể vui lòng giải thích chính xác regexp bạn đã sử dụng trong đề xuất của bạn? Nó cũng phù hợp với tôi và tôi đoán nó phù hợp với GET đầu tiên, nhưng không thể hiểu được '/' tiếp theo và lý do tại sao không có miền trước '/ foo/bar /' – Stratboy

+0

@Stratboy Tôi hy vọng các trang được liên kết giải thích mọi thứ. Vâng, mẫu '^ [A-Z] + \/foo/bar /' kiểm tra dòng yêu cầu HTTP như được trình phân tích cú pháp HTTP của máy chủ nhìn thấy và điều kiện chỉ đúng khi mẫu không khớp. Có lẽ đó là '\' làm bạn mất tập trung nhưng đó vẫn là một phần của mô hình. – Gumbo

Các vấn đề liên quan