Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 阻止文件夹,同时允许在其中使用某些url模式_Php_Apache_.htaccess - Fatal编程技术网

Php 阻止文件夹,同时允许在其中使用某些url模式

Php 阻止文件夹,同时允许在其中使用某些url模式,php,apache,.htaccess,Php,Apache,.htaccess,首先,我是htaccess的新手 直截了当地说 我有一个结构化文件夹,如public_html/account 使用htaccess,我如何阻止对domain.com/account的访问,同时允许访问类似domain.com/account/login的url 这可能吗?我很想在这里得到一些帮助。像这样的: SetEnvIf Request_URI "/account/login$" allow SetEnvIf Request_URI "/account/logout$" allo

首先,我是htaccess的新手

直截了当地说

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

使用htaccess,我如何阻止对domain.com/account的访问,同时允许访问类似domain.com/account/login的url

这可能吗?我很想在这里得到一些帮助。

像这样的:

SetEnvIf Request_URI "/account/login$"  allow  
SetEnvIf Request_URI "/account/logout$"  allow 
RewriteRule ^accounts/?$ /accounts/login [L,R=301]
选项1

SetEnvIf Request_URI "/account/login$"  allow  

Order Deny,Allow
Deny from all
Allow from env=allow

Satisfy any
不确定您必须在
setenif Request_URI
中输入什么,但它应该是请求URI(这应该很接近)

将其放入
帐户/.htaccess

基本上,它使用环境变量来设置一个标志'allow',如果它与特定的URI匹配,那么当您执行
allow
时,您可以查找该环境变量,只有当URI与您输入的内容匹配时,才会设置该环境变量

模块允许您根据请求的不同方面是否与指定的正则表达式匹配来设置内部环境变量。服务器的其他部分可以使用这些环境变量来决定要采取的操作,并使CGI脚本和SSI页面可以使用这些环境变量

您还可以添加更多URL,如下所示:

SetEnvIf Request_URI "/account/login$"  allow  
SetEnvIf Request_URI "/account/logout$"  allow 
RewriteRule ^accounts/?$ /accounts/login [L,R=301]
使用Deny的问题是它看起来不太好。也许有办法解决这个问题,但我不知道怎么解决。我想你也许可以设置一个错误页面

选项2

您可能只想将其重定向到其他地方。大概是这样的:

SetEnvIf Request_URI "/account/login$"  allow  
SetEnvIf Request_URI "/account/logout$"  allow 
RewriteRule ^accounts/?$ /accounts/login [L,R=301]
对不起,如果我弄错了一两个,我总是忘了把它们放在哪里。我也有很长一段时间没有使用复杂的重写,在我弄明白如何在URI而不是查询字符串上路由之前,我经常做更多的重写。也许3-4年前。。。哈哈

这个URI的正则表达式以accounts开头,结尾(或者可选地以斜杠结尾),因此它不应该与
/accounts/{anything}
匹配。您也可以将其重定向到index.php或任何您想要的地方

  • ^
    匹配开始URI
  • accounts
    逐字匹配“accounts”
  • /?
    匹配
    /
    字面上的
    可选
  • $
    匹配URI的结尾(这非常重要)
更新

我查了一下:)然后像嘟嘟一样

如果您为
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美元(我们将知道我为他做了其他一些事情,但我离题了)

干杯


希望有帮助。

域名/com/account将用于什么?对不起,我不明白你的问题,你是问我将使用域名做什么,还是你想要域名?你为什么要限制域名/com/account?它会被其他用户使用吗?我只是不想让用户查看它,因为我已经在public_html中有index.html了。/account文件夹中的框架是在laravel(使用路由)上编写的,作为一名新手,我对php只有基本的了解。替换/account文件夹中的index.php将是meSo的灾难/account文件夹是否包含Laravel应用程序?但在Laravel应用程序上,web服务器通常指向Laravel根应用程序文件夹中包含的/public文件夹。最后,如果限制你的laravel路线不容易的话,我会犹豫的!