.htaccess 只允许访问 index.php 和一个目录
Posted
技术标签:
【中文标题】.htaccess 只允许访问 index.php 和一个目录【英文标题】:.htaccess only allow access to index.php and a directory 【发布时间】:2015-08-07 10:05:10 【问题描述】:我正在使用
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 文件是可访问的。
但是对于任何其他 url,我得到一个 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>
【问题讨论】:
你也可以显示/public/.htaccess
吗?
@anubhava 我编辑了问题以包含它。
【参考方案1】:
在/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]
【讨论】:
当我去 localhost/mysite/index.php 时它工作正常,但是当我去 localhost/mysite/home/ 时我仍然被禁止。既然重定向到index.php,不应该允许吗? 我以为您只想允许http://example.com/public/*
和 http://example.com/index.php
。不是这样吗?
就是这样,但我也希望能够拥有干净的 url,所以基本上 url localhost/mysite/home/
是对 index.php
和 $_SERVER['REQUEST_URI'] = "/mysite/home"
的请求。问题是,即使对 localhost/mysite/home/ 的请求应该发送到index.php
,它也被.htaccess
禁止
这个 .htaccess 在哪里?在根目录或mysite
或/mysite/home/
中。我认为您的要求和您的文件/目录结构不完全同步。
.htaccess 位于mysite
。 index.php 文件也在mysite
中。 /mysite/home/ 不是一个实际的目录,它是一个干净 url 的示例,例如 /mysite/anyUserRequest/secondUserRequestParameter/
【参考方案2】:
你可以使用:
RewriteEngine on
RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d
RewriteRule ^(.+)$ index.php
这是我用于我的应用程序的 .htaccess。在 public 目录下,我只放置 index.php 和我需要的 JS、CSS 和图片文件,所以不需要过滤掉。任何其他文件(例如上传文件)都保存到公共文件夹之外的文件夹中 - 因此它们不能直接访问 - 只能通过读取它们的 php 脚本。我相信这是“最佳实践”。
【讨论】:
这将是我最后的手段,但我真的很想找出我的 .htaccess 有什么问题,并让它与我当前的文件结构一起工作以上是关于.htaccess 只允许访问 index.php 和一个目录的主要内容,如果未能解决你的问题,请参考以下文章
.htaccess 拒绝访问图像文件夹,但允许访问查看单个图像
htaccess 规则以在访问 http://localhost 时提供 index.php 而不是 index.html