2015-05-25 15 views
5

Tôi đang sử dụng.htaccess chỉ cho phép truy cập vào index.php và một thư mục

RewriteEngine On 
RewriteRule ^.*$ ./index.php 

để chuyển hướng tất cả lưu lượng trang web của mình thông qua index.php và để mã php của tôi có được REQUEST_URI và tuyến đường mỗi yêu cầu cho phù hợp.

Tôi muốn hạn chế quyền truy cập vào tất cả các file khác/thư mục ngoại trừ một trong đó sẽ chứa các file js, file css, hình ảnh vv

tôi thấy rằng để làm điều đó tôi có thể sử dụng:

Order deny,allow 
Deny from all 

<Files index.php> 
    Order Allow,Deny 
    Allow from all 
</Files> 

và sau đó có một tệp .htaccess khác trong thư mục công cộng để cho phép một số loại tệp nhất định.

Khi tôi điều hướng đến localhost/mysite/index.php, nó hoạt động tốt vì tệp index.php có thể truy cập được.

Nhưng đối với bất kỳ url nào khác, tôi nhận được 403, ví dụ/mysite/home/bị cấm mặc dù tôi dự kiến ​​nó hoạt động bình thường.

Tôi có thể làm gì để có được hành vi mong đợi?

My tập tin đầy đủ .htacces là:

RewriteEngine On 

RewriteCond %{SCRIPT_FILENAME} !-d 
RewriteCond %{SCRIPT_FILENAME} !-f 

RewriteRule ^.*$ ./index.php 


Order deny,allow 
Deny from all 

<Files index.php> 
    Order Allow,Deny 
    Allow from all 
</Files> 

EDIT: Các /public/.htaccess hiện trông như thế này:

<Files ~ "\.(xml|css|jpe?g|png|gif|js|pdf)$"> 
    Allow from all 
</Files> 
+0

bạn có thể chỉ cho '/ công cộng/cũng .htaccess'? – anubhava

+0

@anubhava Tôi đã chỉnh sửa câu hỏi để bao gồm cả quá. – ppp

Trả lời

5

Hãy thử mã này trong /mysite/.htaccess:

DirectoryIndex index.php 
RewriteEngine On 

RewriteCond %{SCRIPT_FILENAME} !-d 
RewriteCond %{SCRIPT_FILENAME} !-f 
RewriteRule^index.php [L] 

RewriteRule !^(public/|index\.php) [NC,F] 
+0

Nó hoạt động tốt khi tôi đi đến localhost/mysite/index.php, nhưng tôi vẫn nhận được một cấm khi tôi đi đến localhost/mysite/home /. Nó có nên được cho phép vì nó được chuyển hướng đến index.php không? – ppp

+0

Tôi nghĩ bạn chỉ muốn cho phép 'http: // example.com/public/*' và 'http: // example.com/index.php'. đây không phải là trường hợp à? – anubhava

+0

Đó là trường hợp, nhưng tôi cũng muốn có thể có các url sạch, do đó, về cơ bản url 'localhost/mysite/home/'là một yêu cầu tới' index.php' với '$ _SERVER [' REQUEST_URI '] ="/mysite/home "'. Vấn đề là mặc dù yêu cầu đến localhost/mysite/home/được cho là được gửi tới 'index.php', nó bị cấm bởi' .htaccess' – ppp

1

Bạn có thể sử dụng:

RewriteEngine on 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 

RewriteRule ^(.+)$ index.php 

Đó là .htaccess tôi sử dụng cho các ứng dụng của mình. Trong thư mục công cộng, tôi chỉ đặt tệp index.php và JS, CSS và hình ảnh mà tôi cần, vì vậy không cần phải lọc chúng ra. Bất kỳ tệp nào khác (chẳng hạn như video tải lên), được lưu vào thư mục bên ngoài thư mục công khai - vì vậy chúng không thể truy cập trực tiếp - chỉ qua tập lệnh php đọc chúng. Tôi tin rằng đó là "thực hành tốt nhất".

+0

Đây sẽ là phương sách cuối cùng của tôi, nhưng tôi thực sự muốn tìm thấy những gì là sai với htaccess của tôi và làm cho nó làm việc với cấu trúc tập tin hiện tại của tôi – ppp

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