我正在使用
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>
答案 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;。