Mod重写锁定执行PHP文件和访问.git文件夹

时间:2013-08-10 01:22:34

标签: apache mod-rewrite

我想使用mod-rewrite块执行除文件根目录中的bootstrap.php文件之外的所有文件,我还想阻止访问.git文件夹中的所有文件(也在文档根目录中)。另一个(可能更好的解决方案)是允许只访问名为public的目录内的文件(在我的应用程序的不同部分有多个名为public的目录),拒绝直接访问任何其他文件,同时通过我的引导程序指向所有其他请求。 php文件。这就是我所拥有的。

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .* /bootstrap.php

RewriteCond %{REQUEST_FILENAME} -fd
RewriteRule .*\.php /denied.php

RewriteCond %{REQUEST_FILENAME} -fd
RewriteRule \.git /denied.php

非常感谢任何建议。

2 个答案:

答案 0 :(得分:1)

您不能在文件条件上使用多个验证,如果您使用此类文件,则会出现类似bad flag delimiters的错误:

RewriteCond %{REQUEST_FILENAME} !-fd

所以它会是这样的:

Options +FollowSymLinks -MultiViews
RewriteEngine On

# not a existent file
RewriteCond %{REQUEST_FILENAME} !-f
# and not a folder
RewriteCond %{REQUEST_FILENAME} !-d
# and not a symbolic link
RewriteCond %{REQUEST_FILENAME} !-l
# and not bootstrap.php or denied.php
RewriteCond %{REQUEST_FILENAME} !(bootstrap.php|denied.php)$
# redirect to /bootstrap.php
RewriteRule .* /bootstrap.php

# is a existent file
RewriteCond %{REQUEST_FILENAME} -f [OR]
# or directory
RewriteCond %{REQUEST_FILENAME} -d [OR]
# or symbolic link
RewriteCond %{REQUEST_FILENAME} -l
# and not bootstrap.php or denied.php
RewriteCond %{REQUEST_FILENAME} !(bootstrap.php|denied.php)$
# contains .php or .git + anything else redirect to /denied.php
RewriteRule \.(php|git)/?.*$ /denied.php

您也可以使用F标志,而该标志会向客户端浏览器返回403 FORBIDDEN响应。

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -l
RewriteCond %{REQUEST_FILENAME} !(bootstrap.php|denied.php)$
RewriteRule \.(php|git)/?.*$ - [F]

答案 1 :(得分:0)

如何限制对某个文件夹的访问的常用方法是将自己的.htaccess文件放入该文件夹并使用此代码进入该文件

Order Allow,Deny
Deny from all

这可以防止整个文件夹(以及该文件夹中的所有文件夹)访问(来自网络/互联网)。

所以我想如果你在主文件夹中使用它并修改它,那么它只允许存储所有“公共访问文件”的文件夹(例如图像和.css),它将是最适合您的解决方案。

您可以允许这样的文件夹

Order Allow,Deny
Allow /onefoldername
Deny from all

这样可以防止除了名为“onefoldername”的文件夹以外的任何内容从网上访问。