使用.htaccess限制直接访问目录

r55awzrz  于 2023-01-26  发布在  其他
关注(0)|答案(1)|浏览(215)

我有以下文件夹结构,其中我有一个Web应用程序运行:

/root/public/index.php

我在/root中有一个.htaccess,它将所有请求重定向到/root/public,但我也可以通过在请求中预先添加/public目录来访问我的内容,例如在我可以这样做的时候

  • www.example.com/public/index.php
  • www.example.com/index.php

两者都指向相同的资源,但我只希望人们通过转到来访问资源,如果他们尝试直接访问/public目录,则返回错误

www.example.com/index.php

我现在的.htaccesss看起来像这样:

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteRule ^(.*)$ public/ [L]
</IfModule>

我在这里错过了什么,以阻止通过URL访问我的/public文件夹?
我试过应用WordPress使用的一些重写规则',但没有为我的用例工作,按照这里的指南:https://wordpress.org/documentation/article/htaccess/

fzwojiic

fzwojiic1#

你可以这样做:

RewriteEngine On

# Block direct requests to the "/public" subdirectory
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^public/ - [F]

# Rewrite all requests to "/public/index.php"
RewriteRule ^ public/index.php [END]

(The不需要<IfModule> Package ,应将其删除。)
REDIRECT_STATUS环境变量的检查确保只检查直接请求(来自用户),而不是由以后的重写所重写的请求。
请注意,我更改了现有规则,将请求直接重写为/public/index.php,因为这似乎是目的所在(而不是依赖于DirectoryIndex)。
不过,我想知道你是如何管理你的静态资产(如果有的话)?

相关问题