阻止文件夹同时允许其中的某些网址格式

时间:2018-09-02 21:09:40

标签: php apache .htaccess

首先是htaccess的新手

深入探讨

我有一个结构化的文件夹,例如public_html / account

使用htaccess,如何在允许访问 domain.com/account/login

之类的网址的同时阻止对 domain.com/account 的访问

Image here

那有可能吗?我会在这里帮忙。

1 个答案:

答案 0 :(得分:0)

类似这样的东西:

选项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或任何您想要的地方。

  • ^匹配起始URI
  • accounts从字面上匹配“帐户”
  • /?从字面上匹配/的{​​{1}}可选
  • ?匹配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永久重定向。我希望网站的这一部分显示或不显示在搜索结果中。例如,如果它出现在Google上,请执行301,因为这样(最终)它会从搜索结果中删除。我这样说,但他们也可能会将301页删除。因此,这可能只是个人喜好。

“拒绝”的一个优点是您还可以在htaccess中用密码保护它,这样您就可以通过登录名对其进行访问,但是它不能公开访问。如果您有一个静态IP地址,也可以使用IP地址。最近,我对一个使用401的旧站点进行了此操作,这很容易赚到100美元(我们还会为他做一些其他事情,但我要离题)。

干杯!

希望有帮助。