编辑htaccess通过php
我有一个脚本,在某些事件阻止某人通过一个htaccess拒绝IP。 这是代码:编辑htaccess通过php
file_put_contents('.htaccess', 'deny from ' . $_SERVER['REMOTE_ADDR'] . "\n", FILE_APPEND);
但我想要的东西反而OD该用户拒绝我能得到它会将用户重定向到另一个页面。
我可以通过这样做:
Options +FollowSymlinks
RewriteEngine on
RewriteCond %{REMOTE_HOST} !^123\.45\.67\.89
RewriteRule \.html$ /alternate_page.html [R=302,L]
但有可能做到这一点,而无需打开htaccess以及追加到它。请使用the file_put_contents
函数
非常感谢。
我建议存储你不想在数据库中允许的IP地址。这使得管理和如果你想统计,他们也可以很容易地添加(即该用户被拒绝后访问该网站多少次,etd)。如果您愿意,您甚至可以将某些IP发送到不同的位置。
- 存储在数据库表中的IP地址
- 当用户来到页检查,看看他们的IP是表
- 如果是这样递增统计计数器(如果需要)和重定向用户新的位置
- 还是继续加载当前页面
使用PHP的Header functionHeader('Location: [url here]');
重定向并记住它必须在任何其他内容发送到该页面。
你可以做的是有你的.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
(编辑:这没有按” t看起来非常正确...所以可能需要一点编辑,但希望总体思路有帮助)
是的,但是在第一个人不需要另一个虚拟人编辑 – DonJuma 2010-11-18 01:40:06
不行之后,虚拟人仍然会在那里。我仍然认为我编写的代码有问题,但是我不能确定什么=/ – 2010-11-18 01:40:56
正确的方法是使用看门人功能n,它会检查IP,并根据需要将请求转发到所需的页面。
<?php
header('Location: http://www.yoursite.com/new_page.php');
?>
你应该在任何输出发送到浏览器之前调用它,包括任何HTML标签或空格。常用的方法是在发送任何内容之前,有一个'forward'函数包装头部命令,并首先进行访问控制。
你并不需要使用的.htaccess用于将用户重定向到其他页面,只是使用基于你从$_SERVER['REMOTE_ADDR']
得到什么location
header:
header("Location: http://anothersite.com")
不要忘记这一点(从PHP手册):
记住,报头()必须调用 任何实际的输出被发送之前, 或者通过正常的HTML标记,在一个文件中的空白 线,或从PHP。在调用header()之前,包含()或require()函数或 另一个文件访问函数,并且有 空格或空行输出 是一个 非常常见的错误。
+1除非OP正在尝试自动设置Web主机(类似CPanel),否则在脚本中重定向是肯定的要走的路。 – deceze 2010-11-18 02:25:20
无论你做什么,请确保你同步多个脚本,可能同时尝试做到这一点,所以你不会结束一个损坏的'.htaccess'文件,并在每个人都发出HTTP 500错误。 – cdhowie 2010-11-18 01:36:09
我该怎么做 – DonJuma 2010-11-18 01:36:53