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 过滤器的更具体的内容。它也没有清楚地解释我是否可以/应该将RewriteCond
和RewriteRule
放在带有地理位置信息的<IfModule>
内。【参考方案2】:
回答您的第二个问题,根据此页面:
https://www.askapache.com/htaccess/using-filesmatch-and-files-in-htaccess/
你可以用<Files></Files>
或<FilesMatch></FilesMatch>
指令包围其他指令:
"该指令通过以下方式限制了所附指令的范围 文件名。它应该与指令匹配。这 本节中给出的指令将应用于任何对象 具有与指定匹配的基本名称(文件名的最后一个组成部分) 文件名。部分按照它们出现的顺序进行处理 配置文件,在节和 .htaccess 之后 文件被读取,但在部分之前。注意可以 嵌套在部分内以限制 它们适用的文件系统。”
所以基本上你所说的似乎应该有效。
【讨论】:
以上是关于htaccess - 根据地理位置拒绝目录的主要内容,如果未能解决你的问题,请参考以下文章
带有“全部拒绝”的.htaccess 文件是不是也拒绝子目录?
.htaccess 拒绝所有-> 目录索引不起作用(拒绝所有和白名单文件)