簡體   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