php - 阻止文件夹,同时允许其中包含一些 url 模式
问题描述
首先是 htaccess 的新手。
下来问。
我有一个像 public_html/account 这样的结构化文件夹
使用 htaccess,我如何阻止对domain.com/account的访问, 同时允许访问诸如 domain.com/account/login 之类的 URL
这甚至可能吗?我会喜欢这里的一些帮助。
解决方案
像这样的东西:
选项1
SetEnvIf Request_URI "/account/login$" allow
Order Deny,Allow
Deny from all
Allow from env=allow
Satisfy any
不确定您必须输入什么SetEnvIf Request_URI
,但它应该是请求 URI(这应该是关闭的)。
把这个放进去account/.htaccess
。
基本上它使用环境变量来设置一个标志“允许”,如果它匹配一个特定的 URI,那么当你这样做时,allow
你可以寻找那个环境变量,只有当 URI 匹配你输入的内容时才会设置。
mod_setenvif模块允许您根据请求的不同方面是否匹配您指定的正则表达式来设置内部环境变量。服务器的其他部分可以使用这些环境变量来决定要采取的操作,以及可供 CGI 脚本和 SSI 页面使用
您还可以像这样添加更多网址:
SetEnvIf Request_URI "/account/login$" allow
SetEnvIf Request_URI "/account/logout$" allow
使用 Deny 的问题是它看起来不太好。可能有办法解决这个问题,但我不确定如何正确。我想你可以设置一个错误页面,也许。
选项2
您可能只想将其重定向到其他地方。像这样的东西:
RewriteRule ^accounts/?$ /accounts/login [L,R=301]
抱歉,如果我/
错了一两个,我总是忘记把它们放在哪里。我也很长时间没有使用复杂的重写了,在我弄清楚如何在 URI 上而不是查询字符串上路由之前,我曾经做过更多的事情。也许是 3-4 年前……哈哈
用于此的正则表达式,URI 以帐户开头并结束(或可选地以斜杠结尾),因此它不应该匹配/accounts/{anything}
. 你也可以把它重定向到 index.php 或者你想要的任何地方。
^
匹配开始 URIaccounts
从字面上匹配“帐户”/?
匹配/
字面上?
可选$
匹配 URI 的结尾(这很重要)
更新
我查了一下:),就像dooh。
如果您为(拒绝访问)错误设置错误页面(文档),403
它将在被阻止并触发403
代码时发送到该错误页面:
SetEnvIf Request_URI "/account/login$" allow
Order Deny,Allow
Deny from all
Allow from env=allow
Satisfy any
ErrorDocument 403 /error/error.html
因此,我想这取决于您是要发出403
拒绝访问还是301
永久重定向。我会基于网站的这一部分是否出现在搜索结果中。如果它出现在谷歌上,例如这样做,301
因为那么它将(最终)从搜索结果中删除。我这么说,但他们也可能会删除401
页面。所以这可能只是个人喜好。
Deny 的一个优点是您还可以对其进行密码保护(在 htaccess 中),这样您就可以通过登录来访问它,但它不会被公开访问。如果您有静态 IP 地址,您也可以使用 IP 地址。最近我为一个使用 的旧网站做了这个CakePHP
,这很容易 100 美元(我们将为他做了一些其他的事情,但我离题了)。
干杯!
希望能帮助到你。
推荐阅读
- r - 从R中的数据库中选择一个表
- mysql - 学校作业交付清单mysql
- c# - TFS 本地负载测试管道
- sql - 将 1 个表连接到同一列上的 2 个表
- html - Shopify 页脚网格 - 大小和对齐内容
- typescript - NestJS 无法解析 UserController 的依赖关系
- php - 向 XML 添加字符串时发生数据丢失
- dialogflow-es - How to send a response to dialogflow later
- php - php preg_replace 为每个捕获组分配不同的替换模式
- python - 在 Python 中获取两个列表组合的最佳方法是什么 -