繁体   English   中英

通过php编辑htaccess

[英]edit htaccess via php

我有一个脚本,在某些事件中会通过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函数

非常感谢。

您无需使用.htaccess即可将用户重定向到其他页面,只需根据从$_SERVER['REMOTE_ADDR']获得的内容使用location 标头

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

并且不要忘记这一点(来自PHP手册):

请记住,必须先通过常规HTML标记,文件中的空白行或从PHP发送任何实际输出,然后调用header()。 使用include()或require(),函数或另一个文件访问函数读取代码,并在调用header()之前输出空格或空行,这是一个非常常见的错误。

您可以做的是将您的.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"));
?>

高温超导
(编辑:这似乎不太正确...因此可能需要一些编辑。不过希望总体思路有所帮助。)

正确的方法是使用网闸功能,该功能检查IP,然后根据需要将请求转发到所需页面。

<?php

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

?>

在将任何输出发送到浏览器(包括任何HTML标记或空格)之前,应先调用此方法。 常见的方法是具有“转发”功能,该功能包装标头命令,并在发送任何内容之前先进行访问控制。

我建议将您不想允许的IP地址存储在数据库中。 这样就可以进行管理,如果需要统计信息,也可以轻松添加它们(例如,该用户被拒绝后尝试访问该站点的次数等)。 如果需要,您甚至可以将某些IP发送到其他位置。

  • 将IP地址存储在数据库表中
  • 当用户进入页面时,检查其IP是否在表格中
  • 如果是这样,则增加统计计数器(如果需要)并将用户重定向到新位置
  • 或继续加载当前页面

使用php的Header函数 Header('Location: [url here]'); 重定向它们,并记住它必须在任何其他内容发送到页面之前。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM