我有一个脚本,在某些事件上通过htaccess拒绝阻止某人的ip。 这是代码:
file_put_contents('.htaccess', 'deny from ' . $_SERVER['REMOTE_ADDR'] . "\n", FILE_APPEND);
然而我想要的是反过来这个用户可以将它重定向到另一个页面。
我可以通过以下方式完成此任务:
Options +FollowSymlinks
RewriteEngine on
RewriteCond %{REMOTE_HOST} !^123\.45\.67\.89
RewriteRule \.html$ /alternate_page.html [R=302,L]
但是可以在不打开htaccess并附加到它的情况下执行此操作。而是使用the file_put_contents
函数
非常感谢。
答案 0 :(得分:3)
您无需使用.htaccess将用户重定向到其他网页,只需根据location
的内容使用$_SERVER['REMOTE_ADDR']
header:
header("Location: http://anothersite.com")
并且不要忘记这一点(来自PHP手册):
请记住,必须调用header() 在发送任何实际输出之前, 通过普通的HTML标签,空白 文件中的行,或来自PHP。它是一个 用于读取代码的常见错误 include(),或require(),函数或 另一个文件访问功能,并有 输出的空格或空行 在调用header()之前。
答案 1 :(得分:0)
你能做的就是拥有你的.htaccess文件:
Options +FollowSymLinks
RewriteEngine on
# ADD RULES HERE
RewriteCond x x # This is a dummy condition that is always true
RewriteRule \.html$ /aternate_page.html [R=302,L]
然后你可以像这样替换你的工作:
<?php
file_put_contents(".htaccess",str_replace("# ADD RULES HERE","# ADD RULES HERE\nRewriteCond %{REMOTE_HOST} ^".$_SERVER['REMOTE_ADDR']."$",file_get_contents(".htaccess"));
?>
HTH
(编辑:这似乎不太正确......所以可能需要一点编辑。希望一般的想法有所帮助。)
答案 2 :(得分:0)
正确的方法是使用检查IP的网守功能,并根据需要将请求转发到所需的页面。
<?php
header('Location: http://www.yoursite.com/new_page.php');
?>
您应该在将任何输出发送到浏览器之前调用此方法,包括任何HTML标记或空格。常见的方法是在发送任何内容之前,先使用'forward'函数包装header命令,然后先进行访问控制。
答案 3 :(得分:0)
我建议您在数据库中存储不希望允许的IP地址。这使得管理和如果你想要统计数据,它们也可以很容易地添加(即,该用户在被拒绝后尝试访问该网站的次数,等等)。如果需要,您甚至可以将某些IP发送到不同的位置。
使用php的Header function Header('Location: [url here]');
重定向它们并记住它必须在将任何其他内容发送到该页面之前。