Tôi đã xem xét trên Google và StackOverflow cho câu trả lời cho câu hỏi này, nhưng thực tế là tôi không biết nhiều về .htaccess không giúp tôi quyết định câu trả lời đúng cho tình hình của tôi, vì vậy tôi hỏi ở đây..htaccess RewriteCond nơi URI không chứa miền
Tình huống của tôi là tôi có một số trang web đang sử dụng cùng một thư mục vật lý làm thư mục gốc trên máy chủ.
Tất cả đều hoạt động tốt nhưng tôi muốn đảm bảo rằng mỗi trang web không thể truy cập từng hình ảnh khác từ trình duyệt trừ khi chúng nằm đúng tên miền.
Hiện nay tôi có một cấu trúc tập tin như thế này:
/resources/{resource}/{full_domain_name}
Vì vậy, ví dụ www.domain.co.uk
sẽ có một cấu trúc như thế này:
http://www.domain.co.uk/resources/images/www.domain.co.uk/some_image.jpg
Nhưng nếu www.domain_2.co.uk
tồn tại bằng cách sử dụng thư mục vật lý tương tự cho các trang web sau đó họ có thể xem tài nguyên của miền khác từ miền của riêng họ, như sau:
http://www.domain_2.co.uk/resources/images/www.domain.co.uk/some_image.jpg
Đây thực sự không phải là vấn đề lớn vì hoàn toàn không có thông tin nhạy cảm được lưu trữ trong các thư mục này, nhưng nó gây phiền toái và tôi muốn người dùng không thể thực hiện được (không phải bất kỳ ai thực sự có).
Tôi đã thử đặt một tập tin .htaccess vào thư mục/nguồn lực nhưng tôi bị mắc kẹt với các biểu thức thông thường, vv
tôi về cơ bản muốn chắc chắn rằng URI chứa tên miền hiện tại bằng cách khác chuyển hướng đến một 403 trang lỗi.
Đây là những gì tôi đã đưa ra:
RewriteCond %{REQUEST_URI} !^(/resources/[^/]*/%{HTTP_HOST})(.*)$
RewriteRule ^(.*)$ /error/403.php
Lý do tôi đưa vào các bit [^/]
là bởi vì có một số thư mục, ví dụ:
/resources/images/{full_domain_name}
/resources/scripts/{full_domain_name}
/resources/stylesheets/{full_domain_name}
Ai có thể giúp tôi với các điều kiện?
Mọi trợ giúp sẽ được đánh giá cao.
Kết quả của quy tắc hiện tại của bạn là gì? Dường như nó sẽ hoạt động, ngoại trừ việc bạn không cần bất kỳ '()' xung quanh '/ resources/[^ /] * /% {HTTP_HOST}. *' –
@Michael Hiện tại nếu tôi đang ở trên www.domain.co .uk và truy cập www.domain.co.uk/resources/stylesheets/www.domain.co.uk/style.css ví dụ: nó luôn chuyển hướng tôi đến tệp /error/403.php. Khi tôi loại bỏ các quy tắc .htaccess nó tìm thấy tập tin như nó phải làm bình thường. –
Bạn không thực sự cần toàn bộ '% {REQUEST_URI}' đại diện trong regex. Bạn chỉ có thể so khớp http_host 'RewriteCond% {REQUEST_URI}! ^. +% {HTTP_HOST}' –