.htaccess只允许访问index.php和目录

时间:2015-05-25 22:01:19

标签: php apache .htaccess mod-rewrite

我正在使用

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

通过index.php重定向我的所有网站流量,让我的php代码获取request_uri并相应地路由每个请求。

我想限制访问除了包含js文件,css文件,图像等的所有其他文件/目录。

我发现要这样做我可以使用:

Order deny,allow
Deny from all

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

然后在公共目录中有另一个.htaccess文件以允许某些文件类型。

当我导航到localhost / mysite / index.php时,它可以正常工作,因为index.php文件是可访问的。

但是对于任何其他网址我得到403,例如/ mysite / home /是被禁止的,即使我期望它正常工作。

我能做些什么来获得预期的行为?

我的完整.htacces文件是:

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>
编辑:/public/.htaccess目前看起来像这样:

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

2 个答案:

答案 0 :(得分:6)

/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]

答案 1 :(得分:1)

您可以使用:

RewriteEngine on

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

RewriteRule ^(.+)$ index.php

这是我用于我的应用程序的.htaccess。在公共目录中,我只放置了我需要的index.php和JS,CSS和图像文件,因此不需要将它们过滤掉。任何其他文件(如上传)都保存到公共文件夹之外的文件夹中 - 因此它们不能直接访问 - 只能通过读取它们的php脚本。我相信这是&#34;最佳实践&#34;。