Jak utworzyć plik robots.txt dla wszystkich domen na serwerze Apache

10

Mamy konfigurację serwera WWW rozwoju Apache XAMPP z wirtualnymi hostami i chcemy powstrzymać serps przed indeksowaniem wszystkich naszych stron. Można to łatwo zrobić za pomocą pliku robots.txt. Jednak wolelibyśmy nie umieszczać pliku disallow robots.txt na każdym vhostie, a następnie musielibyśmy go usunąć, gdy uruchomiliśmy witrynę na innym serwerze.

Czy istnieje sposób z plikiem konfiguracyjnym Apache, aby przepisać wszystkie żądania do robots.txt na wszystkich vhostach do pojedynczego pliku robots.txt?

Jeśli tak, czy możesz podać mi przykład? Myślę, że byłoby to coś takiego:

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

Dzięki!

Michael Berkompas
źródło
Plik robots.txt nie jest obowiązkowy, a niektóre roboty indeksujące go zignorują. Nie należy tego postrzegać jako funkcji bezpieczeństwa. Jeśli chcesz ukryć swoją witrynę, dopóki nie będzie gotowa do publicznego udostępnienia, dodaj uwierzytelnianie.
Mircea Vutcovici,

Odpowiedzi:

25

Apache mod_alias jest przeznaczony do tego i dostępny z podstawowego systemu Apache, i może być ustawiony w jednym miejscu prawie bez narzutu przetwarzania, w przeciwieństwie do mod_rewrite.

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

Z tą linią w pliku apache2.conf, poza wszystkimi vhostami, http://example.com/robots.txt - na dowolnej stronie internetowej, którą obsługuje, wyświetli podany plik.

Alister Bulman
źródło
To. Umieść Aliasw każdym <VirtualHost>bloku. +1.
Steven poniedziałek
Dzięki! To działało idealnie. Wiedziałem, że istnieje łatwe rozwiązanie ...
Michael Berkompas,
Jeśli chcesz na każdym wirtualnym hoście, nie musisz umieszczać go we wszystkich. Może przejść na poziom globalny, tak jak domyślny / ręczny alias robi to od razu po wyjęciu z pudełka.
Alister Bulman,
Dzięki za rozwiązanie, chociaż widok C: / tam powoduje, że mam mdłości w żołądku, wiedząc, że jest tam inny serwer Windows :) Umieszczam swoją edycję w pliku module.conf lub w włączonym mods / alias.conf w ten sposób: Alias /robots.txt /var/www/robots.txt
unc0nnected
1
Aby mieć pewność, że ten plik jest dostępny, nawet jeśli inne kontrole dostępu go zablokują, umieść alias, a <Location "/robots.txt"> Allow from all </Location>zaraz po nim wewnątrz głównego<IfModule alias_module>
Walf
1

Umieść swój wspólny robots.txtplik globalny gdzieś w systemie plików serwera, który jest dostępny dla procesu apache. Dla ilustracji zakładam, że to jest /srv/robots.txt.

Następnie, aby skonfigurować mod_rewriteobsługę tego pliku dla klientów, którzy go zażądają, umieść następujące reguły w <VirtualHost>bloku konfiguracji każdego vhosta :

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

Jeśli umieszczasz reguły przepisywania w .htaccessplikach dla poszczególnych katalogów , a nie w <VirtualHost>blokach, musisz nieco zmodyfikować reguły:

RewriteEngine on
RewriteBase /
RewriteRule ^robots.txt$ /srv/robots.txt [NC, L]
Steven Monday
źródło
Czy możesz wyjaśnić to „Umieść swój wspólny globalny plik robots.txt gdzieś w systemie plików serwera, który jest dostępny dla procesu apache. Dla ilustracji założę, że jest to plik /srv/robots.txt”. bardziej szczegółowo? Muszę wiedzieć, co masz na myśli, tworząc katalog dostępny dla procesu apache?
Michael Berkompas,
Każda witryna znajduje się w folderze takim jak testsite.int.devcsd.com pod C: \ xampp \ vhosts
Michael Berkompas
@Michael: Nie przejmuj się tym zbyt skomplikowanym mod_rewritehackowaniem. Użyj Aliaszamiast tego, zgodnie z sugestią Alister.
Steven poniedziałek,
0

Nie jestem pewien, czy używasz XAMPP w systemie Linux, czy nie, ale jeśli tak, możesz utworzyć dowiązanie symboliczne ze wszystkich hostów wirtualnych do tego samego pliku robots.txt, ale musisz upewnić się, że konfiguracja Apache dla każdego hosta wirtualnego jest wolno podążać za dowiązaniami symbolicznymi (zgodnie z <Directory>dyrektywą Options FollowSymLinks).

gravyface
źródło
Wolałbym nie edytować każdej deklaracji vhosta. Jest ich ponad 30 ... Plus, chcę, żeby to był automatyczny over over, więc nie muszę nic robić, gdy tworzę nowy vhost.
Michael Berkompas,
Michael, po prostu użyj sed, aby dokonać masowej edycji, całkiem proste rzeczy, zdecydowanie nie musisz tego robić ręcznie. Na dole wyjaśniono
połączono
0

Inne podejście do rozwiązania.

W moim środowisku klastrowym hostuję wiele (ponad 300) wirtualnych hostów. Aby uchronić moje serwery przed atakami robota, definiuję opóźnienie indeksowania na 10 sekund.

Nie mogę jednak wymusić na wszystkich moich klientach stałej konfiguracji pliku robots.txt. Pozwalam moim klientom korzystać z własnego pliku robots.txt, jeśli chcą.

Moduł Przepisz najpierw sprawdza, czy plik istnieje. Jeśli nie istnieje, moduły przepisują moją konfigurację domyślną. Przykład kodu poniżej ...

Aby zachować przepisywanie wewnętrzne, należy użyć aliasu. Zamiast definiować nowy alias, który może powodować konflikty po stronie użytkownika, umieściłem mój plik robots.txt w folderze / APACHE / error /, który ma już domyślny alias.

<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>
aesnak
źródło