编辑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函数

非常感谢。

+0

无论你做什么,请确保你同步多个脚本,可能同时尝试做到这一点,所以你不会结束一个损坏的'.htaccess'文件,并在每个人都发出HTTP 500错误。 – cdhowie 2010-11-18 01:36:09

+0

我该怎么做 – DonJuma 2010-11-18 01:36:53

我建议存储你不想在数据库中允许的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看起来非常正确...所以可能需要一点编辑,但希望总体思路有帮助)

+0

是的,但是在第一个人不需要另一个虚拟人编辑 – DonJuma 2010-11-18 01:40:06

+0

不行之后,虚拟人仍然会在那里。我仍然认为我编写的代码有问题,但是我不能确定什么=/ – 2010-11-18 01:40:56

正确的方法是使用看门人功能n,它会检查IP,并根据需要将请求转发到所需的页面。

<?php 

header('Location: http://www.yoursite.com/new_page.php'); 

?> 

你应该在任何输出发送到浏览器之前调用它,包括任何HTML标签或空格。常用的方法是在发送任何内容之前,有一个'forward'函数包装头部命令,并首先进行访问控制。

你并不需要使用的.htaccess用于将用户重定向到其他页面,只是使用基于你从$_SERVER['REMOTE_ADDR']得到什么locationheader

header("Location: http://anothersite.com") 

不要忘记这一点(从PHP手册):

记住,报头()必须调用 任何实际的输出被发送之前, 或者通过正常的HTML标记,在一个文件中的空白 线,或从PHP。在调用header()之前,包含()或require()函数或 另一个文件访问函数,并且有 空格或空行输出 是一个 非常常见的错误。

+1

+1除非OP正在尝试自动设置Web主机(类似CPanel),否则在脚本中重定向是肯定的要走的路。 – deceze 2010-11-18 02:25:20