2014-09-21 20 views
6

Tôi muốn sử dụng tệp .htaccess để kiểm tra xem đường dẫn được yêu cầu có phải là tệp trong thư mục public/ hay không. Nếu có, hãy phân phát, chuyển yêu cầu khác đến /index.php. Tôi dường như không thể làm được điều này..htaccess: Cung cấp các tệp tĩnh, định tuyến mọi thứ khác tới index.php

Đây là những gì tôi đã có:

Options +FollowSymLinks 
RewriteEngine on 

Options -Indexes 

RewriteCond %{DOCUMENT_ROOT}/public%{REQUEST_URI} -f 
RewriteRule^%{DOCUMENT_ROOT}/public%{REQUEST_URI} [L] 

RewriteRule^index.php [QSA,L] 

ví dụ http://example.com/css/style.css nên có apache phục vụ /public/css/style.css vì đó là một tệp tồn tại, nhưng http://example.com/css/style.bad phải được gửi đến /index.php.

Trả lời

1

Dường như [L] does not work as I expected. Với ý nghĩ đó, và rất nhiều thử và sai, tôi cố gắng tìm một cái gì đó mà làm việc:

RewriteEngine On 

RewriteCond %{DOCUMENT_ROOT}/public%{REQUEST_URI} -f 
RewriteRule^public%{REQUEST_URI} [L] 

RewriteCond %{REQUEST_URI} !^/public/ 
RewriteRule^index.php [QSA,L] 
6

Mã này sẽ được làm việc như mong đợi về phía bạn

Options +FollowSymLinks -MultiViews -Indexes 

RewriteEngine On 
RewriteBase/

RewriteCond %{DOCUMENT_ROOT}/public/$1 -f 
RewriteRule ^(.*)$ public/$1 [L] 

RewriteCond %{THE_REQUEST} \s/public/ [NC,OR] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule^index.php [L,QSA] 
+0

đó làm việc! Cảm ơn bạn. Tôi chỉ nhận thấy rằng mặc dù 'style.css' có sẵn tại * cả *'/css/style.css' * và * '/ public/css/style.css'. Về mặt kỹ thuật, sau này nên định tuyến đến 'index.php' vì'/public/public/css.style.css' không phải là một tệp. Điều này cũng có nghĩa là '/ public/xxx' sẽ ném một apache 404 thay vì tùy chỉnh mà tôi đã cấu hình trong tệp' index.php' của tôi. Không có cách nào để khắc phục điều đó, phải không? – mpen

+1

Tôi đã chỉnh sửa câu trả lời của tôi để đưa ra nhận xét của bạn xem xét –

+1

Bạn là ma thuật thân yêu của tôi. Bạn đã cứu tôi. Cảm ơn rất nhiều –

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