我正在尝试关闭一个网站,只允许我的 IP 地址以外的任何人访问。我几乎可以做到了。我无法访问 www.mysite.com,但我可以访问包含另一个 .htaccess 文件的所有文件夹。
我在 /www 中有一个 .htaccess 文件,其中包含以下代码:
#Use this when website is down
RewriteEngine on
#this allows access through my ip
RewriteCond %{REMOTE_ADDR} !^(66\.777\.888\.99)$
RewriteRule !down.php$ /down.php [L]
我的网站中的某些文件夹中包含 .htaccess 文件。如果我有一个包含以下行的文件:
RewriteEngine on
我仍然可以访问该文件夹。例如,如果我在 /www/about 中有第二个 .htaccess 文件,那么我仍然可以访问 mysite.com/about(但该页面中包含的 .css 文件实际上会加载 down.php)。
如果我删除“RewriteEngine on”,我会被重定向到 down.php。
有什么想法吗?我认为我的 mod_rewrite 与多个 .htaccess 文件混淆了。
谢谢!
答案1
那么如何放置:
Order deny,allow
Deny from all
Allow from ip.ad.dre.ss
在你的.htaccess
文件中?还是在系统范围的 httpd 配置中?
答案2
如果您可以访问您的(虚拟)主机配置,为什么不添加这些行?
<Location />
Order deny,allow
Deny from all
Allow from 1.1.1.1
ErrorDocument 403 /down.php
</Location>
<Location /down.php>
Order allow,deny
Allow from all
</Location>
答案3
检查您的 apache 日志文件是否有错误,您可能会在某处看到 about/down.php 的 404。否则,默认的 Mod Rewrite 调试提示如下:
尝试将其添加到您的 http 配置中(在配置中的某处,它在 htaccess 或虚拟主机级别不起作用)
RewriteLog /tmp/rewrite.log
RewriteLogLevel 9
这将逐行解释它尝试匹配什么正则表达式以及最终的决定是什么。
然后删除这些行,否则有一天你会发现你的磁盘空间并没有你想象的那么多……
答案4
在所有子文件夹 .htaccess 文件中执行此操作。
RewriteEngine On
RewriteOptions Inherit
查看更多:http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#RewriteOptions