2008-08-06 22 views
18

Trong ứng dụng phụ thuộc rất nhiều vào .htaccess RewriteRules cho PrettyURLs của nó (CakePHP trong trường hợp của tôi), làm cách nào để thiết lập chính xác các chỉ thị để loại trừ các thư mục nhất định khỏi ghi đè này? Đó là:.htaccess chỉ thị cho * không * chuyển hướng các URL nhất định

/appRoot/.htaccess 
     app/ 
     static/ 

Theo mặc định mọi yêu cầu để /appRoot/* đang được viết lại để được nhặt bởi app/webroot/index.php, nơi nó được phân tích và hành động điều khiển tương ứng đang được gọi. Này được thực hiện bởi những chỉ thị trong .htaccess:

RewriteBase /appRoot 

RewriteRule ^$ app/webroot/  [L] 
RewriteRule (.*) app/webroot/$1 [L] 

bây giờ tôi muốn loại trừ một vài thư mục như tĩnh/từ viết lại này. Tôi cố gắng với điều này trước các RewriteRules Cake:

RewriteCond $1 ^(static|otherDir).*$ [NC] 
RewriteRule (.*) - [L] 

Nó hoạt động trong chừng mực mà các yêu cầu không còn viết lại, nhưng bây giờ tất cả yêu cầu được bỏ qua, thậm chí yêu cầu Bánh hợp pháp mà không phải phù hợp với ^(static|otherDir).*$.

Tôi đã thử một số biến thể của các quy tắc này nhưng không thể làm cho nó hoạt động theo cách tôi muốn.

Trả lời

6

Và câu trả lời đúng iiiiis ...

RewriteRule ^(a|bunch|of|old|directories).* - [NC,L] 

# all other requests will be forwarded to Cake 
RewriteRule ^$ app/webroot/ [L] 
RewriteRule (.*) app/webroot/$1 [L] 

tôi vẫn không hiểu tại sao file index.php trong thư mục gốc được gọi là ban đầu ngay cả với các chỉ thị tại chỗ. Hiện tại, nó nằm ở

/appRoot/app/views/pages/home.ctp 

và được xử lý thông qua Bánh nữa. Với điều này tại chỗ bây giờ, tôi cho rằng điều này cũng đã có hiệu quả (một chút thay đổi bản đề xuất của Mike, chưa được kiểm tra):

RewriteCond $1  !^(a|bunch|of|old|directories).*$ [NC] 
RewriteRule ^(.*)$ app/webroot/$1 [L] 
1

Tháo [L] từ các quy tắc theo thời gian:

RewriteBase /appRoot 

RewriteRule ^$ app/webroot/     
RewriteRule (.*) app/webroot/$1 

[L] có nghĩa là "Ngăn chặn quá trình viết lại ở đây và không áp dụng bất kỳ quy tắc viết lại nhiều hơn nữa."

1

thể bạn không áp dụng điều kiện để các quy tắc sau, nhưng với phủ định, như trong (với một số biến thể của chúng, tôi không quá giỏi ghi nhớ quy tắc .htaccess, vì vậy những lá cờ có thể là sai):

RewriteCond $1 !^(static|otherDir).*$ [NC] 
RewriteRule ^$ app/webroot/ [L] 

RewriteCond $1 !^(static|otherDir).*$ [NC] 
RewriteRule ^$ app/webroot/$1 [L] 
Các vấn đề liên quan