編輯:克朗是好的,我忘記了打開RewriteEngine On
,這裏留下這個以防其他人想要做同樣的事情,因爲我找不到指南任何地方。使用htaccess重定向tor出口節點IP列表到一個頁面
自從我使用Apache以來,這已經有一段時間了,所以這可能只是一個語法問題。我試圖將所有tor用戶重定向到我的域(/tor.php
)上的特定頁面,以通知他們我們正在運行hidden service,他們需要通過隱藏服務訪問該網站。
由於隱藏的服務將顯示%{REMOTE_ADDR}
爲127.0.0.1,我想我可以只搶TOR IP列表每天一次上一個cron,在sed
用它玩,並追加到我的.htaccess
。這是我想出迄今:
#!/bin/bash
#
# Cron job to get a list of TOR IP addresses and redirect to tor.php
sed -in '/#\ TOR-REDIRECT-BLOCK/,/#\ END-TOR-REDIRECT-BLOCK/d' /path/to/www/.htaccess
wget -q https://check.torproject.org/cgi-bin/TorBulkExitList.py?ip=my.server.ip.address -O - | sed '/^\#/d' | sed "s/^/RewriteCond %{REMOTE_ADDR} ^/g; s/\./\\\./g; s/$/\$ \[OR\] /g; 1i# TOR-REDIRECT-BLOCK" >> /path/to/www/.htaccess
echo "RewriteCond %{REMOTE_ADDR} ^0\.0\.0\.0$" >> /path/to/www/.htaccess
echo "RewriteCond %{REQUEST_URI} !^/tor.php$" >> /path/to/www/.htaccess
echo "RewriteCond %{REQUEST_URI} !^/tor.css$" >> /path/to/www/.htaccess
echo "RewriteRule ^(.*)$ /tor.php [R,L]" >> /path/to/www/.htaccess
echo "# END-TOR-REDIRECT-BLOCK" >> /path/to/www/.htaccess
這消除# TOR-REDIRECT-BLOCK
和# END-TOR-REDIRECT-BLOCK
之間包裹的舊塊,並增加了基於IP列表上一個新的,看起來是這樣的:
# TOR-REDIRECT-BLOCK
RewriteCond %{REMOTE_ADDR} ^103\.4\.16\.118$ [OR]
RewriteCond %{REMOTE_ADDR} ^106\.187\.36\.183$ [OR]
RewriteCond %{REMOTE_ADDR} ^106\.187\.36\.240$ [OR]
RewriteCond %{REMOTE_ADDR} ^106\.187\.37\.158$ [OR]
...
RewriteCond %{REMOTE_ADDR} ^99\.230\.106\.155$ [OR]
RewriteCond %{REMOTE_ADDR} ^0\.0\.0\.0$
RewriteCond %{REQUEST_URI} !^/tor.php$
RewriteCond %{REQUEST_URI} !^/tor.css$
RewriteRule ^(.*)$ /tor.php [R,L]
# END-TOR-REDIRECT-BLOCK
之後,我加載Tor瀏覽器,並嘗試導航到http://mydomain/phpinfo.php
(這是Apache密碼保護,所以這個文件沒有公開)。它加載phpinfo.php
而不是將我重定向到tor.php
。 phpinfo.php
中的REMOTE_ADDR
位於.htaccess
文件中的IP地址列表中,該文件應該被重定向。
我有mod_rewrite
啓用,所以這不是問題。 0.0.0.0
規則是因爲我的sed
-foo不夠好,不能記住如何將[OR]
附加到除最後一行之外的所有行。任何幫助深表感謝。