2012-02-15 23 views
5

Tôi đang cố gắng phân phát các tệp CSS cho trang web của mình từ một tên miền riêng biệt.Apache .htaccess: Cung cấp tệp .css từ tên miền riêng biệt?

Tôi đã có các mục sau đây trong .htaccess của trang web (trong thư mục gốc tài liệu):

RewriteRule ^templates/*\.css$ http://css.mysite.com/templates/$1 [R=301,L] 

Với mục đích đơn giản phù hợp với:

http://www.mysite.com/templates/default/styles/main.css 

... và gửi một HTTP 301 chuyển hướng đến:

http://css.mysite.com/templates/default/styles/main.css 

Nhưng những gì thực sự được gọi là:

http://css.mysite.com/templates/.css 

(Tôi muốn lặp lại ở trên cho *.js và phục vụ họ từ js.mysite.com và tất cả png & jpgs và phục vụ họ từ img.mysite.com.)

Bất kỳ hiểu biết sâu sắc sẽ là tuyệt diệu. Tôi đã phải thừa nhận, htaccess viết lại quy tắc luôn luôn dường như elude tôi.

+1

Chỉ cần chắc chắn rằng, bạn không có một cách chỉ để * yêu cầu * css trực tiếp từ khác URL, phải không? Nghĩa là, thay đổi các trang để thực hiện yêu cầu trực tiếp thay vì thực hiện chuyển hướng? – Andrew

+0

Tôi đang cố gắng giữ trang web càng linh động càng tốt. Tôi nhận ra tôi sẽ dùng một hit với chuyển hướng 301, nhưng bằng cách giữ mọi thứ trong tệp .htaccess, nếu tôi cần di chuyển trang web sang miền hoặc máy chủ mới cho mục đích khôi phục thảm họa, chỉ cần xóa các dòng khỏi .htaccess tệp sẽ hoàn nguyên mọi thứ trở lại để được phân phát cục bộ. Ít nhất, đó là suy nghĩ của tôi. :-) Cách này tôi có thể ghi đè lên CSS mà không cần chỉnh sửa bất kỳ tệp CSS nào trong nội bộ. Trang web sẽ bị khóa chặt khi nó hoạt động. – gellenburg

Trả lời

7

Hãy thử điều này và cho tôi biết:

RewriteEngine On 
RewriteBase/

RewriteCond %{HTTP_HOST} !^css\. 
RewriteRule ^templates/(.*)\.css$ http://css.mysite.com/templates/$1.css [R=301,L] 

hay một "cách năng động" hơn

RewriteCond %{HTTP_HOST} ^(www\.)?mysite 
RewriteRule ^templates/(.*)\.(js|css)$ http://$2.mysite.com/templates/$1.$2 [R=301,L] 
RewriteRule ^templates/(.*)\.(jpg|gif|swf|jpeg|png)$ http://imgs.mysite.com/templates/$1.$2 [R=301,L] 

một này sẽ kiểm tra cho JS và CSS và sử dụng tên miền phụ dựa trên phần mở rộng tập tin: vì vậy .js sẽ truy cập vào js.mysite.com và .css sẽ truy cập css.mysite.com và tương tự cho hình ảnh nhưng thay vào đó, chúng sẽ chuyển sang imgs.mysite.com.

hoặc thậm chí còn chung chung hơn:

RewriteCond %{HTTP_HOST} ^(www\.)?mysite 
RewriteRule ^templates/(.*)$ http://media.mysite.com/templates/$1 [R=301,L] 

Bạn chuyển hướng tất cả mọi thứ bắt đầu bằng templates

+0

Thú vị. Tôi đoán tôi có thể tạo jpg.mysite.com, css.mysite.com, js.mysite.com, png.mysite.com và gif.mysite.com. Nói về việc song song các kết nối http! :-) Tôi nghĩ rằng đó sẽ là quá nhiều rắc rối mặc dù. Tôi đã thử ví dụ đầu tiên của bạn mặc dù và có vẻ như tất cả mọi thứ trong "mẫu" đang được chuyển hướng đến các tên miền phụ (không chỉ là phần mở rộng css). :/ – gellenburg

+0

Tôi đồng ý, bạn có thể tạo một "phương tiện" như: media.mysite.com và chuyển hướng mọi thứ ở đó - Tôi đã cập nhật câu trả lời của mình –

+0

@gellenburg, có vẻ như mọi thứ đang chuyển hướng đến ' css.mysite.com' nếu bạn đã nhập đúng ví dụ của BOZ 1. Quy tắc này sẽ chỉ kích hoạt 'GET/templates/*. Css'. Sử dụng regexpChecker.php và lưu ý 301 bẫy về chủ đề này: [Mẹo để gỡ lỗi .htaccess rewrite rules] (http://stackoverflow.com/questions/9153262/tips-for-debugging-htaccess-rewrite-rules) – TerryE

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