我想使用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
非常感谢任何建议。
答案 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”的文件夹以外的任何内容从网上访问。