[英]Can I block search crawlers for every site on an Apache web server?
我在公共互聯網上有一些登台服務器,運行一些網站的生產代碼副本。 如果登台網站被編入索引,我真的不喜歡它。
有沒有辦法可以在登台服務器上修改我的httpd.conf來阻止搜索引擎爬蟲?
由於我使用腳本將相同的代碼庫復制到兩個服務器,因此更改robots.txt將無法正常工作。 此外,我寧願不更改虛擬主機conf文件,因為有一堆網站,如果我建立一個新網站,我不想記得復制某個設置。
使用以下內容創建robots.txt文件:
User-agent: *
Disallow: /
將該文件放在登台服務器上的某個位置; 你的目錄根是一個很好的地方(例如/var/www/html/robots.txt
)。
將以下內容添加到httpd.conf文件中:
# Exclude all robots
<Location "/robots.txt">
SetHandler None
</Location>
Alias /robots.txt /path/to/robots.txt
可能不需要SetHandler
指令,但是如果你使用像mod_python這樣的處理程序可能需要它。
現在,將為服務器上的所有虛擬主機提供robots.txt文件,覆蓋您可能擁有的各個主機的任何robots.txt文件。
(注意:我的答案基本上與ceejayoz的答案建議你做的一樣,但我不得不花費額外的時間來弄清楚所有具體細節才能讓它發揮作用。我決定把這個答案放在這里為了別人的利益誰可能偶然發現這個問題。)
您可以使用Apache的mod_rewrite來執行此操作。 假設您的真實主機是www.example.com,而您的暫存主機是staging.example.com。 創建一個名為“robots-staging.txt”的文件,並有條件地重寫要轉到該文件的請求。
這個示例適用於保護單個暫存站點,比您要求的更簡單的用例,但這對我來說可靠:
<IfModule mod_rewrite.c>
RewriteEngine on
# Dissuade web spiders from crawling the staging site
RewriteCond %{HTTP_HOST} ^staging\.example\.com$
RewriteRule ^robots.txt$ robots-staging.txt [L]
</IfModule>
您可以嘗試將蜘蛛重定向到另一台服務器上的主robots.txt,但是一些蜘蛛在獲得除HTTP請求中的“200 OK”或“404 not found”返回代碼以外的任何內容后可能會猶豫不決,並且他們可能無法讀取重定向的URL。
這是你如何做到這一點:
<IfModule mod_rewrite.c>
RewriteEngine on
# Redirect web spiders to a robots.txt file elsewhere (possibly unreliable)
RewriteRule ^robots.txt$ http://www.example.com/robots-staging.txt [R]
</IfModule>
您是否可以將暫存虛擬主機上的robots.txt替換為托管在其他位置的限制性robots.txt?
要真正阻止頁面被編入索引,您需要隱藏HTTP身份驗證背后的網站。 您可以在全局Apache配置中執行此操作,並使用簡單的.htpasswd文件。
唯一的缺點是,您現在必須在第一次瀏覽到登台服務器上的任何頁面時鍵入用戶名/密碼。
根據您的部署方案,您應該尋找將不同的robots.txt文件部署到dev / stage / test / prod(或您擁有的任何組合)的方法。 假設你有不同的數據庫配置文件或(或任何類似的)不同的服務器上,這應該遵循類似的過程( 你有你的數據庫不同的密碼,對吧?)
如果你沒有一步到位的部署過程,這可能是一個很好的動機來獲得一個...有很多工具可用於不同的環境--Capistrano是一個相當不錯的工具,並且在Rails /中受到青睞Django世界,但絕不是唯一的。
如果做不到這一點,您可以在Apache配置中設置一個全局Alias指令,該指令適用於所有虛擬主機並指向限制性robots.txt
嘗試使用Apache來阻止壞機器人 。 您可以在線獲取用戶代理或僅允許瀏覽器,而不是試圖阻止所有機器人。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.