htaccess - 根据地理位置拒绝目录

Posted

技术标签:

【中文标题】htaccess - 根据地理位置拒绝目录【英文标题】:htaccess - deny directory based on geolocation 【发布时间】:2018-04-15 08:34:09 【问题描述】:

我正在子域中设置 WordPress 站点。子域将位于主目录的子目录中。

所以http://dl.abc.com 将在文件夹 /public_html/dl/ 中

安装 WordPress 后,其中会有 wp-admin 文件夹: /public_html/dl/wp-admin/

除了来自澳大利亚和新加坡的用户之外,我们想要阻止任何试图访问它的 wp-admin 文件夹(或其中包含的任何文件/子目录)。

这是正确的方法吗?(我怀疑任何通过调用 admin-ajax.php 发出 ajax 请求的插件都无法正常工作?)

<ifModule mod_geoip.c>
GeoIPEnable On
# Put countries to allow here
SetEnvIf GEOIP_COUNTRY_CODE NZ AllowCountry
SetEnvIf GEOIP_COUNTRY_CODE SG AllowCountry
Deny from all
Allow from env=AllowCountry
</ifModule>

第二个问题是我们如何才能对将安装在 /public_html/dl/ 文件夹中的 wp-login.php 文件做同样的事情? 如果我们将它放在 /public_html/dl/ 目录中的 .htaccess 文件中,这会起作用吗?还是有更好的办法?

<Files "wp-login.php">
<ifModule mod_geoip.c>
GeoIPEnable On
# Put countries to allow here
SetEnvIf GEOIP_COUNTRY_CODE NZ AllowCountry
SetEnvIf GEOIP_COUNTRY_CODE SG AllowCountry
Deny from all
Allow from env=AllowCountry
</ifModule>
</Files>

?

最后,对于上面的两个示例,我希望有一点额外的“通过默默无闻的安全性”我宁愿返回“404 未找到”错误而不是拒绝错误。 最好的方法是什么?

不幸的是,我们没有任何类型的开发/测试服务器可以先进行尝试,因此希望在第一次通过时尽可能接近完美。

谢谢。 _

【问题讨论】:

【参考方案1】:

htaccess - 根据地理位置拒绝目录 检查这个网址:https://mediatemple.net/community/products/dv/204643270/using-htaccess-rewrite-rules

【讨论】:

我查看了链接。我没有看到任何关于 GeoLocations 和 File 过滤器的更具体的内容。它也没有清楚地解释我是否可以/应该将RewriteCondRewriteRule 放在带有地理位置信息的&lt;IfModule&gt; 内。【参考方案2】:

回答您的第二个问题,根据此页面: https://www.askapache.com/htaccess/using-filesmatch-and-files-in-htaccess/ 你可以用&lt;Files&gt;&lt;/Files&gt;&lt;FilesMatch&gt;&lt;/FilesMatch&gt; 指令包围其他指令:

"该指令通过以下方式限制了所附指令的范围 文件名。它应该与指令匹配。这 本节中给出的指令将应用于任何对象 具有与指定匹配的基本名称(文件名的最后一个组成部分) 文件名。部分按照它们出现的顺序进行处理 配置文件,在节和 .htaccess 之后 文件被读取,但在部分之前。注意可以 嵌套在部分内以限制 它们适用的文件系统。”

所以基本上你所说的似乎应该有效。

【讨论】:

以上是关于htaccess - 根据地理位置拒绝目录的主要内容,如果未能解决你的问题,请参考以下文章

带有“全部拒绝”的.htaccess 文件是不是也拒绝子目录?

.htaccess 拒绝目录访问

.htaccess 拒绝所有-> 目录索引不起作用(拒绝所有和白名单文件)

使用 .htaccess 拒绝访问目录中的所有 PHP 文件

拒绝使用 htaccess 列出目录

htaccess <Directory> 拒绝所有