首先,我是一个有htaccess的新手。
向下询问。
我有一个类似public_html/account的结构化文件夹
使用htaccess,我如何阻止对domain.com/account的访问,同时允许访问像domain.com/account/login这样的url
这有可能吗?我会喜欢这里的一些帮助。
发布于 2018-09-03 06:53:56
如下所示:
Option1
SetEnvIf Request_URI "/account/login$" allow
Order Deny,Allow
Deny from all
Allow from env=allow
Satisfy any
不确定必须在SetEnvIf Request_URI
中放入什么内容,但应该是请求URI (这应该很接近)。
将此文件放入account/.htaccess
。
基本上,它使用环境变量来设置标志'allow‘,如果它与特定的URI匹配,那么当您执行allow
时,您可以查找该环境变量,只有当URI与您输入的URI匹配时,才会设置该环境变量。
mod_setenvif模块允许您根据请求的不同方面是否与您指定的正则表达式匹配来设置内部环境变量。服务器的其他部分可以使用这些环境变量来决定要采取的操作,以及使其可用于CGI脚本和SSI页面
您还可以添加更多urls,如下所示:
SetEnvIf Request_URI "/account/login$" allow
SetEnvIf Request_URI "/account/logout$" allow
使用Deny的问题是它看起来不是很好。也许有一种方法可以解决这个问题,但我不确定如何从顶部开始。我想你可以设置一个错误页面。
Option2
您可能只想将其重定向到其他地方。如下所示:
RewriteRule ^accounts/?$ /accounts/login [L,R=301]
抱歉,如果我弄错了一两个/
,我总是忘记把它们放在哪里。我也有很长一段时间没有使用复杂的重写了,在我想出如何在URI而不是查询字符串上路由之前,我会做更多的重写。可能在3-4年前...LOL
对于这个正则表达式,URI以accounts开头,以accounts结尾(也可以以斜杠结尾),所以它不应该与/accounts/{anything}
匹配。你也可以把它重定向到index.php或者你想要的任何地方。
^
匹配起始URIaccounts
匹配'accounts‘literally/?
匹配/
字面意义?
可选择的$
匹配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美元(我还为他做了一些其他的事情,但我离题了)。
干杯!
希望能有所帮助。
https://stackoverflow.com/questions/52141056
复制相似问题