Làm cách nào tôi có thể sử dụng robot.txt để không cho phép tên miền phụ?


10

Cơ sở mã của tôi được chia sẻ giữa nhiều môi trường (trực tiếp, dàn, dev) & tên miền phụ ( staging.example, dev.example, vv) và chỉ có hai nên được phép thu thập (ví dụ. www.exampleexample). Thông thường tôi sẽ sửa đổi /robots.txtvà thêm Disallow: /, nhưng do cơ sở mã được chia sẻ, tôi không thể sửa đổi /robots.txtmà không ảnh hưởng đến tất cả các tên miền (phụ).

Bất kỳ ý tưởng làm thế nào để đi về nó?

Câu trả lời:


13

Bạn có thể phân phát một robots.txttệp khác dựa trên tên miền phụ thông qua đó trang web đã được truy cập. Một cách để làm điều này trên Apache là bằng cách viết lại URL bằng cách sử dụng mod_rewrite trong .htaccess. Cái gì đó như:

RewriteEngine On
RewriteCond %{HTTP_HOST} !^(www\.)?example\.com$ [NC]
RewriteRule ^robots\.txt$ robots-disallow.txt [L]

Các điều khoản trên nói rằng đối với tất cả các yêu cầu đến robots.txtnơi lưu trữ là bất cứ điều gì khác hơn www.example.comhoặc example.com, sau đó viết lại yêu cầu trong nội bộ robots-disallow.txt. Và robots-disallow.txtsau đó sẽ chứa Disallow: /chỉ thị.

Nếu bạn có các lệnh khác trong tệp .htaccess thì lệnh này sẽ cần ở gần đầu, trước bất kỳ chỉ thị định tuyến nào.


Tôi đã nghĩ về giải pháp tương tự. Tôi không chắc chắn nếu có một cái gì khác ngoài đó, nhưng vào cuối ngày, nếu đó là nó, thì đó sẽ là công việc của tôi được thực hiện)
alexus

1
Nếu cả hai tên miền / máy chủ lưu trữ đều trỏ đến cùng một cơ sở mã / không gian web thì không có gì trong "tiêu chuẩn" của robot.txt có thể kiểm soát điều này, nếu đó là những gì bạn đang đề xuất. Bot chỉ đơn giản là sẽ yêu cầu sub.example.com/robots.txt, vì vậy bạn sẽ cần phải làm gì đó để phục vụ một phản hồi khác nhau tùy thuộc vào tên miền phụ. Bạn không cần sử dụng mod_rewrite, nhưng đó là một kỹ thuật tôi đã thấy sử dụng nhiều lần. Nếu robots.txtđược tạo động thì bạn có thể thay đổi phản hồi trong mã phía máy chủ (ví dụ: PHP).
MrWhite

Một cách khác để sử dụng robots.txtcó thể là để ngăn chặn việc lập chỉ mục, thay vì thu thập dữ liệu, bằng cách gửi X-Robots-Tag: noindextiêu đề phản hồi HTTP khi các tên miền phụ đó được truy cập (cũng có thể được thực hiện trong .htaccess). Mặc dù tôi nghĩ rằng ngăn chặn bò có lẽ là tốt hơn. (?)
MrWhite

1

robots.txt chỉ hoạt động nếu nó hiện diện trong thư mục gốc.

Bạn cần tải lên một trang riêng robots.txtcho từng trang web tên miền phụ, nơi nó có thể được truy cập từ đó http://subdomain.example.com/robots.txt.

Thêm mã dưới đây vào robots.txt

User-agent: *
Disallow: /

Và một cách khác là bạn có thể chèn <META>thẻ Robot vào tất cả các trang.

<META NAME="ROBOTS" CONTENT="NOINDEX, NOFOLLOW">

3
Nhưng OP đã tuyên bố: "Thông thường tôi sẽ sửa đổi /robots.txtvà thêm Disallow: /, nhưng do cơ sở mã được chia sẻ, tôi không thể sửa đổi /robots.txtmà không ảnh hưởng đến tất cả các tên miền (phụ)."
MrWhite

0

Tôi sẽ xóa thẻ meta khỏi trang html và tự động xây dựng nó tùy thuộc vào tên miền phụ của bạn. ví dụ: chúng tôi sử dụng tên miền phụ dev. cho sự phát triển. Vì vậy, trong sự kiện tải trang, chúng ta có điều này:

  ' Check if domain is DEV or PROD and set robots accordingly meta tag in head
  Dim metatag As HtmlMeta = New HtmlMeta
  metatag.Attributes.Add("name", "robots")
  If CurrentURL.Contains("dev.advertise-it") Then
    metatag.Attributes.Add("content", "NOINDEX, NOFOLLOW")
  Else
    metatag.Attributes.Add("content", "INDEX, FOLLOW")
  End If
  Page.Header.Controls.Add(metatag)

Mặc dù điều này không ngăn cản việc thu thập thông tin , nhưng dường như đó là yêu cầu của OP.
MrWhite
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.