2011-11-29 31 views
6

SetupApache viết lại ngoại lệ để không bao gồm các thư mục cụ thể

Thiết lập của tôi là phải có tài nguyên chia sẻ cho hai hoặc nhiều trang web có cấu trúc tương tự mặc dù nội dung khác nhau. Trong ví dụ ...

http: // localhost/site1/

http: // localhost/site2/

Có hai loại viết lại, nội dung CMS (khá nhiều chỉ nội dung được lặp lại ra ngoài trang) và các mô-đun đặc biệt (ví dụ: mô-đun phần mềm blog), nơi tôi có phần mềm đi vào xử lý nội dung cụ thể hơn từ cơ sở dữ liệu.

Vì vậy, các quy tắc viết lại đầu tiên cho blog đảm bảo rằng các mô-đun trên blog xử lý yêu cầu viết blog ....

http: // localhost/site1/blog/*

http: // localhost/site2/blog/*

... sử dụng phần mềm blog của mô-đun tọa lạc tại ...

http: // localhost/blog/

Nguyên tắc viết lại CMS được thiết kế để h andle yêu cầu mô-đun không đặc hiệu ...

http: // localhost/site1/*

http: // localhost/site2/my_page.html *

... bằng cách sử dụng CMS viết lại phần mềm tọa lạc tại ...

http: // localhost/rewrite.php

vấn đề

Các module trên blog và các mô-đun viết lại CMS đang xung đột. Tôi đã cố gắng thực hiện một ngoại lệ bằng quy tắc sau. Đây là mã của tôi ...

RewriteEngine on 
RewriteCond %{REQUEST_URI} !\.js$ 
RewriteRule .*/blog(.+) blog$1 [QSA] 
RewriteRule !.*/(admin|blog|forums)(.+)$ rewrite.php 

Quy tắc cuối cùng không thực sự hiệu quả. Với mã này nếu tôi truy cập ..

http: // localhost/site1/blog/*

http: // localhost/site2/blog/*

... bất kỳ blog (hoặc admin hoặc diễn đàn) URL cho bất kỳ trang web nào vẫn đang được viết lại để làm việc với localhost/rewrite.php.

Vì vậy, làm thế nào để điều chỉnh các quy tắc cuối cùng để đáp ứng các điều kiện sau đây xin vui lòng ...

1.) Thư mục đầu tiên (site1 hoặc site2 trong localhost/site1/blog) vẫn năng động vì vậy tôi có thể thêm một phần ba trang web nếu tôi muốn mà không cần phải điều chỉnh mã vì bất kỳ lý do nào trong vấn đề đó.

2.) Chỉ mục blog (hoặc quản trị hoặc diễn đàn) (ví dụ: blog /, diễn đàn /, quản trị /) được xử lý bởi mô-đun riêng của chúng cũng như bất kỳ thứ gì bên trong các thư mục đó (ví dụ: admin/1, admin/test.html) bất kể mã HTTP, 200, 404, v.v.

3.) Bất kỳ URL nào không nằm trong danh sách ngoại lệ của quy tắc cuối cùng được xử lý bởi rewrite.php (bất kể mã HTTP, 200, 404, v.v ...).

4.) localhost/site1/blog/không được xử lý bởi rewrite.php và localhost/site1/random_path không được xử lý bởi mô-đun blog viết lại.

Tôi rất sẵn lòng trả lời nhanh với bất kỳ giải thích rõ ràng nào khác.

Trả lời

6

Nhờ một người viết RewriteCond trước đó đã viết có ý nghĩa, tôi đã điều chỉnh nó và nó hoạt động rất tốt!

Lưu ý nếu ai đó quyết định sử dụng mã này mà các điều kiện chỉ hoạt động SAU các quy tắc viết lại cụ thể cho các mô-đun (admin, blog, forums) mặc dù TRƯỚC quy tắc rewrite.php CMS.

Tôi rất sẵn lòng tôn trọng bất kỳ phê bình tích cực nào.

RewriteEngine on 
RewriteCond %{REQUEST_URI} !\.(css|js|zip)$ 

RewriteRule .*/admin(.+) admin$1 [QSA] 
RewriteRule .*/blog(.+) blog$1 [QSA] 
RewriteRule .*/forums(.+) forums$1 [QSA] 

#individual... 
RewriteCond %{REQUEST_URI} !.*/admin 
RewriteCond %{REQUEST_URI} !.*/blog 
RewriteCond %{REQUEST_URI} !.*/forums 

#condensed... 
RewriteCond %{REQUEST_URI} !.*/(admin|blog|forums) 

RewriteRule !\.(css|js|zip)$ rewrite.php 
Các vấn đề liên quan