2013-11-26 91 views
0

我有一臺機器,我租賃的IP地址必須先前已分配給某種鏈接垃圾郵件公司。該公司有數百個域名仍然可以解析我的服務器的IP地址,而谷歌等也在不斷試圖用他們的漫遊器(數十萬頁)來索引該網站。我一直未能讓鏈接垃圾郵件發送者更改其DNS記錄以解決其他問題。精細。返回410 for robots.txt

我決定我可以使用mod_rewrite以相當直接的方式處理這個問題:我希望任何不包含我的域名之一的請求返回410,除非請求是/robots.txt。對於機器人文件,我想返回一個簡單的文件,該文件不允許使用200的所有文件。按照我的想法,我可以快速地將機器人熄滅並恢復正常。

我mod_rewrite的配置是這樣的:

RewriteEngine On 

RewriteCond %{HTTP_HOST} !^.*foo\.com$ 
RewriteRule ^/robots\.txt$ /robots-off.txt [L] 

RewriteCond %{HTTP_HOST} !^.*foo\.com$ 
RewriteRule !^/robots\.txt$ - [G] 

所有我可能在這個IP主機域的某處歸入/在foo.com域。因此,我希望第一條規則告訴Apache輸出/robots-off.txt的內容時,只要對於除我自己以外的任何域的/robots.txt發出請求,就會輸出200的內容。

令人遺憾的是,每個請求的結果都是410,所以機器人永遠不會有機會了解爲什麼他們應該停止對整個站點建立索引。以下是我查詢錯誤主機時的迴應:

The requested resource<br />/robots-off.txt<br /> 
is no longer available on this server and there is no forwarding address. 
Please remove all references to this resource. 

這已經持​​續了一個多星期,沒有終點。第一條規則正在運行,但[L]似乎被忽略,然後運行第二條規則。我不明白爲什麼。

回答

0

好的,我誤解了[L]的工作原理。在這裏看到:mod_rewrite seems to ignore [L] flag

工作的代碼如下所示:

RewriteCond %{HTTP_HOST} !^.*foo\.com$ 
RewriteRule ^robots\.txt$ /robots-off.txt [L] 

RewriteCond %{HTTP_HOST} !^.*foo\.com$ 
RewriteRule !^robots-off\.txt$ - [L,G] 

希望這有助於人。

0

這有點遲,但是這會返回一個重定向到瀏覽器,然後瀏覽器會重新請求robots-off.txt,這將是一個新的請求,所以再次被重寫。但是,如果你做了一個pas-through,那麼apache將返回最終的文件內聯,所以沒有新的請求,並且最後以期望的方式被授予。

RewriteCond %{HTTP_HOST} !^.*foo\.com$ 

RewriteRule ^robots\.txt$ /robots-off.txt [PT,L] 

RewriteCond %{HTTP_HOST} !^.*foo\.com$ 

RewriteRule !^robots-off\.txt$ - [L,G] 
相關問題