Cách tạo tệp robots.txt cho tất cả các tên miền trên máy chủ Apache


10

Chúng tôi có một thiết lập máy chủ web phát triển XAMPP Apache với các máy chủ ảo và muốn ngăn chặn serps thu thập dữ liệu tất cả các trang web của chúng tôi. Điều này được thực hiện dễ dàng với tệp robot.txt. Tuy nhiên, chúng tôi không muốn bao gồm một robot.txt không được phép trong mọi vhost và sau đó phải xóa nó khi chúng tôi phát trực tiếp với trang web trên một máy chủ khác.

Có cách nào với tệp cấu hình apache để ghi lại tất cả các yêu cầu vào tệp robots.txt trên tất cả các vhost thành một tệp robot.txt không?

Nếu vậy, bạn có thể cho tôi một ví dụ? Tôi nghĩ nó sẽ giống như thế này:

RewriteEngine On
RewriteRule  .*robots\.txt$         C:\xampp\vhosts\override-robots.txt [L] 

Cảm ơn!


robot.txt không bắt buộc và một số trình thu thập thông tin sẽ bỏ qua nó. Nó không nên được coi là một tính năng bảo mật. Nếu bạn muốn ẩn trang web của mình cho đến khi nó sẵn sàng để công khai, hãy thêm xác thực.
Mircea Vutcovici

Câu trả lời:


25

Apache mod_alias được thiết kế cho điều này và có sẵn từ hệ thống Apache cốt lõi và có thể được đặt ở một nơi mà hầu như không có chi phí xử lý, không giống như mod_rewrite.

Alias /robots.txt C:/xampp/vhosts/override-robots.txt

Với dòng đó trong tệp apache2.conf, bên ngoài tất cả các vhost, http://example.com/robots.txt - trên bất kỳ trang web nào nó phục vụ, sẽ xuất ra tệp đã cho.


Điều này. Đặt một Aliastrong mỗi <VirtualHost>khối. +1.
Steven Thứ Hai

Cảm ơn! Điều đó đã làm việc hoàn hảo. Tôi biết có một giải pháp dễ dàng ...
Michael Berkompas

Nếu bạn muốn nó trên mỗi máy chủ ảo duy nhất, bạn không cần phải đặt nó vào tất cả chúng. Nó có thể đi ở cấp độ toàn cầu, giống như bí danh mặc định / thủ công không có trong hộp.
Alister Bulman

Cảm ơn về giải pháp mặc dù nhìn thấy C: / trong đó khiến tôi đau bụng khi biết có một máy chủ windows khác ngoài đó :) Tôi đặt bản chỉnh sửa của mình trong tệp mô-đun của mình hoặc trong mods-enable / alias.conf như vậy: /robots.txt /var/www/robots.txt
chưa được phát hiện

1
Để đảm bảo tệp này có sẵn ngay cả khi các điều khiển truy cập khác sẽ chặn nó, hãy đặt bí danh và <Location "/robots.txt"> Allow from all </Location>ngay sau đó, bên trong chính<IfModule alias_module>
Walf

1

Đặt robots.txttệp chung chung của bạn ở đâu đó trong hệ thống tệp của máy chủ có thể truy cập được vào quy trình apache. Để minh họa, tôi sẽ cho rằng nó tại /srv/robots.txt.

Sau đó, để thiết lập mod_rewriteđể phục vụ tệp đó cho các khách hàng yêu cầu, hãy đặt các quy tắc sau vào từng <VirtualHost>khối cấu hình của vhost :

RewriteEngine on
RewriteRule ^/robots.txt$ /srv/robots.txt [NC, L]

Nếu bạn đang đặt các quy tắc viết lại vào .htaccesscác tệp trên mỗi thư mục chứ không phải <VirtualHost>các khối, bạn sẽ cần sửa đổi các quy tắc một chút:

RewriteEngine on
RewriteBase /
RewriteRule ^robots.txt$ /srv/robots.txt [NC, L]

Bạn có thể giải thích điều này "Đặt tệp robot.txt chung chung của bạn ở đâu đó trong hệ thống tệp của máy chủ của bạn có thể truy cập được vào quy trình apache. Để minh họa, tôi sẽ giả sử đó là tại /srv/robots.txt." chi tiết hơn? Tôi cần biết ý của bạn là gì bằng cách tạo một thư mục có sẵn cho quá trình apache?
Michael Berkompas

Mỗi trang web được chứa trong một thư mục như testsite.int.devcsd.com dưới C: \ xampp \ vhosts
Michael Berkompas

@Michael: Đừng bận tâm với vụ mod_rewritehack quá phức tạp này . Sử dụng Aliasthay thế, theo đề xuất của Alister.
Steven Thứ Hai

0

Không chắc bạn có chạy XAMPP trên Linux hay không, nhưng nếu là bạn, bạn có thể tạo một liên kết tượng trưng từ tất cả các máy chủ ảo đến cùng một tệp robot.txt, nhưng bạn cần đảm bảo rằng cấu hình Apache của bạn cho mỗi máy chủ ảo là được phép theo liên kết tượng trưng (theo <Directory>chỉ thị Options FollowSymLinks).


Tôi không muốn phải chỉnh sửa mỗi khai báo vhost. Có hơn 30 ... Ngoài ra, tôi muốn nó là một chuyến đi tự động để tôi không phải làm bất cứ điều gì khi tạo một vhost mới.
Michael Berkompas

Michael, chỉ cần sử dụng sed để chỉnh sửa hàng loạt, những thứ khá dễ dàng, bạn chắc chắn không cần phải làm thủ công. Trả lời làm thế nào để làm điều đó ở đây ở phía dưới: blog.netflowdevelopments.com/2012/10/11/ trên
bắt giữ

0

Cách tiếp cận khác nhau để giải quyết.

Tôi lưu trữ nhiều (hơn 300) virtualhost trong môi trường cụm của tôi. Để bảo vệ máy chủ của tôi khỏi bị thu thập dữ liệu bởi các trình thu thập thông tin, tôi xác định độ trễ Thu thập thông tin trong 10 giây.

Tuy nhiên, tôi không thể thực thi tất cả các máy khách của mình với cấu hình robot.txt cố định. Tôi cho phép khách hàng của mình sử dụng robot.txt của riêng họ nếu họ muốn làm.

Viết lại mô-đun đầu tiên kiểm tra nếu tập tin tồn tại. Nếu nó không tồn tại, các mô-đun viết lại cấu hình mặc định của tôi. Mã ví dụ dưới đây ...

Để giữ viết lại nội bộ, nên sử dụng bí danh. Thay vì xác định một bí danh mới có thể gây ra một số xung đột về phía người dùng, tôi đã đặt thư mục robot.txt của mình bên trong thư mục / APACHE / error / đã có bí danh làm cấu hình mặc định.

<Directory /HOSTING/*/*/public_html>
        Options SymLinksIfOwnerMatch
        <Files robots.txt>
                RewriteEngine On
                RewriteCond %{REQUEST_FILENAME} -f [OR]
                RewriteCond %{REQUEST_FILENAME} -d
                RewriteRule (.*) - [L]
                RewriteRule (.*) /error/robots.txt [L]
        </Files>
</Directory>
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.