2012-03-14 30 views
7

Dưới đây là những gì tôi có bây giờ trong .htaccess tôi và điều này sẽ làm việc trong tương lai:.htaccess viết lại tập tin ảnh để php script

RewriteEngine On 

RewriteCond %{HTTPS} !=on 
RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L] 

RewriteCond %{REQUEST_FILENAME} -s [OR] 
RewriteCond %{REQUEST_FILENAME} -l [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule ^.*$ - [NC,L] 
RewriteRule ^.*$ index.php [NC,L] 

Câu hỏi đặt ra là:

làm thế nào tôi có thể làm cho viết lại này /tmp/some_image.png -> /image.php?file=some_image.png

Tôi đã cố tạo quy tắc của riêng mình nhưng không thành công.

Cảm ơn.

Trả lời

13

Thư mục/tmp có thể truy cập được bằng máy chủ web của bạn không? Tôi hy vọng đó là một thư mục riêng biệt/tmp và không phải là thực tế/tmp của máy chủ vì đó sẽ là một nguy cơ bảo mật.

Dù sao nếu hình ảnh là một tập tin vật lý thì bạn cần phải đặt này sau khi viết lại của bạn để buộc HTTPS và trước khi các điều kiện kiểm tra nếu đó là một tập tin hoặc thư mục:

RewriteRule ^/tmp/([^\.]+)\.png$ /image.php?file=$1.png [NC,L] 

Bạn có thể kiểm tra các phần mở rộng khác như tốt:

RewriteRule ^/tmp/([^\.]+)\.(png|jpg|gif)$ /image.php?file=$1.$2 [NC,L] 

Hoặc nếu bạn không quan tâm (. tất cả mọi thứ là một hình ảnh trong thư mục tmp của bạn Mặc dù tôi không muốn giới thiệu này)

RewriteRule ^/tmp/(.*)$ /image.php?file=$1 [NC,L] 

Nếu nó không phải là một tập tin vật lý, bạn có thể đặt bất kỳ một trong số này ở phần cuối của các quy tắc của bạn.

+0

Cảm ơn, câu trả lời tuyệt vời! – user973254

+0

Quy tắc này 'RewriteRule ^/tmp/([^ \.] +) \. (Png | jpg | gif) $ /image.php?file=$1.$2 [NC, L]' sẽ không hoạt động nếu hình ảnh có '.' trong tên tệp của nó, ví dụ: 'file.name.jpg ' –

+0

Sử dụng' RewriteRule ^/tmp/(. +) \. (png | jpg | gif) $ index.php? file = $ 1. $ 2 [NC, L] 'trong trường hợp bạn muốn cho phép tên tệp có nhiều '.' –

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