2014-03-30 44 views
0

寻找一些关于如何匹配通配符中的特定文件的指导。Apache - 匹配所有目录中的文件

实施例 - 该规则必须适用于:

/path/to/folder1/directory/index.php 
/path/to/folder2/directory/index.php 
/path/to/folder3/directory/index.php 

下面是取得的结构的一个例子。这样做是为了确保他们提示输入用户名/密码,如果这个文件被访问:

<FilesMatch "/path/to/*/directory/index.php"> 
AuthName "Login" 
AuthType Basic 
AuthUserFile /path/to/.htpasswd 

需要有效的用户

然而,这似乎并不奏效。

编辑

第一应答响应后,我改变了代码。这样做的主要目的是确保任何人访问administrator/index.php文件时,都会通过mod_security询问用户名和密码。任何其他index.php文件递归到管理员目录不应提示:

<Directory "/location/to/.*/administrator"> 
    <Files "index.php"> 
    AuthName "Login" 
    AuthType Basic 
    AuthUserFile /path/to/.htpasswd 
    require valid-user 
    </Files> 
</Directory> 

这是否有窍门?

+0

是的,你编辑的例子应该可以工作,但在这种情况下,你不需要'。*'而是'*' - 没有'〜'(或没有DirectoryMatch),通配符使用通配符而不是正则表达式。它可能有点混乱... – mata

+0

明白了。这确实有效。还有一个问题 - 您必须在提示的URL中输入/index.php来请求用户名/密码。任何方式也使它提示,如果他们只是键入网站/管理员/以及? –

+0

您可以直接将auth direvtives直接放入目录部分,省略file指令,那么整个管理员目录都需要密码。应该没有太大的区别。 – mata

回答

0

<Files>指令类似,<FilesMatch>指令仅对文件的基本名称进行操作,而不是在完整路径上,因此指定路径名称将不起作用。

其他则是,FilesMatch默认使用正则表达式(<FilesMatch "expression">基本上为<Files ~ "expression">相同),所以"path/*"实际上匹配path接着斜线任意数量的,你换货会"path/.*" - 但就像我说的,路径不适用于FilesMatchFiles

但指令已经应用到所有子目录,所以如果你把一个.htaccess文件中常见的基本目录,也将适用于所有子目录(除非是后来覆盖):

<Files "index.php"> 
    ... 
</Files> 
+0

感谢您的回复。这需要很多工作才能在所有目录中生成.htaccess文件。这就是为什么我打算在实际的apache服务器配置中创建一个全面的规则。实质上,我想要求任何访问服务器上任何网站上的Joomla的administrator/index.php文件的用户名/密码。 –

+0

我认为最简单的方法是结合[SetEnvIf](http://httpd.apache.org/docs/2.2/mod/mod_setenvif.html#setenvif)来设置一个环境变量,如果路径与[Allow from env = ...](http://httpd.apache.org/docs/2.2/mod/mod_authz_host.html#allow) - 至少如果你没有访问服务器配置。否则一个''目录...>'指令shoudl做的伎俩。 – mata

+0

谢谢马塔。我运行Web服务器,以便我可以完全访问Web服务器配置。这正是我想要做的 - 制定一个通用要求。 –