Apache sunucusundaki tüm etki alanları için robots.txt dosyası nasıl oluşturulur


10

Sanal ana bilgisayarlarla bir XAMPP Apache geliştirme web sunucusu kurulumumuz var ve serplerin tüm sitelerimizi taramasını durdurmak istiyoruz. Bu bir robots.txt dosyası ile kolayca yapılabilir. Ancak, her vhost'a robots.txt'ye izin vermemeyi tercih ederiz ve daha sonra siteyle başka bir sunucuda yayına girdiğimizde kaldırmamız gerekir.

Tüm vhosts'ta robots.txt'ye yönelik tüm istekleri tek bir robots.txt dosyasına yeniden yazmanın bir apache yapılandırma dosyasıyla bir yolu var mı?

Eğer öyleyse, bana bir örnek verebilir misiniz? Bence böyle bir şey olurdu:

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

Teşekkürler!


robots.txt zorunlu değildir ve bazı tarayıcılar bunu yoksayar. Bir güvenlik özelliği olarak görülmemelidir. Sitenizi herkese açık hale gelinceye kadar gizlemek istiyorsanız, kimlik doğrulama ekleyin.
Mircea Vutcovici

Yanıtlar:


25

Apache mod_alias bunun için tasarlanmıştır ve çekirdek Apache sisteminden temin edilebilir ve mod_rewrite'ın aksine neredeyse hiç işlem yükü olmadan tek bir yerde ayarlanabilir.

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

Apache2.conf dosyasındaki bu satırla, tüm vhost'ların dışında, http://example.com/robots.txt - sunduğu herhangi bir web sitesinde, verilen dosyayı verir.


Bu. AliasHer <VirtualHost>bloğa bir tane koyun . +1.
Steven Pazartesi

Teşekkürler! Mükemmel çalıştı. Kolay bir çözüm olduğunu biliyordum ...
Michael Berkompas

Her bir sanal ana bilgisayarda istiyorsanız, hepsini içine koymanız gerekmez. Varsayılan / manuel takma adın kutudan çıktığı gibi küresel bir seviyeye çıkabilir.
Alister Bulman

Her ne kadar C: / içinde görmek beni mideye hasta yapar orada başka bir windows sunucu olduğunu bilerek çözüm için teşekkürler :) Ben benim modüller.conf dosya veya mods-etkin / alias.conf benim gibi koymak: Alias /robots.txt /var/www/robots.txt
unc0nnected

1
Diğer erişim denetimleri tarafından engellenecek olsa bile bu dosyanın kullanılabilir olduğundan emin olmak için, diğer adı ve <Location "/robots.txt"> Allow from all </Location>hemen ardından, ana içinde<IfModule alias_module>
Walf

1

Genel global robots.txtdosyanızı sunucunuzun dosya sisteminde apache işlemi için erişilebilir bir yere koyun . İllüstrasyon uğruna, olduğunu varsayacağım /srv/robots.txt.

Ardından, mod_rewritedosyayı isteyen istemcilere sunacak şekilde ayarlamak için , her vhost'un <VirtualHost>yapılandırma bloğuna aşağıdaki kuralları koyun :

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

Yeniden yazma kurallarını bloklar .htaccessyerine dizin başına dosyalara yerleştiriyorsanız <VirtualHost>, kuralları biraz değiştirmeniz gerekir:

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

Bunu "Genel global robots.txt dosyanızı sunucunuzun dosya sisteminde apache işlemi için erişilebilir bir yere koyun. Açıklamak gerekirse, bunun /srv/robots.txt adresinde olduğunu varsayacağım." daha ayrıntılı? Apache işlemi için kullanılabilir bir dizin oluşturarak ne demek istediğini bilmek gerekir?
Michael Berkompas

Her site C: \ xampp \ vhosts altında testsite.int.devcsd.com gibi bir klasörde yer alır
Michael Berkompas

@Michael: Bu aşırı karmaşık hack'le uğraşmayın mod_rewrite. AliasBunun yerine, Alister tarafından önerildiği gibi kullanın .
Steven Pazartesi

0

Linux'ta XAMPP çalıştırıp çalıştırmadığınızdan emin değilsiniz, ancak kullanıyorsanız , tüm sanal ana bilgisayarlardan aynı robots.txt dosyasına bir symlink oluşturabilirsiniz , ancak her sanal ana bilgisayar için Apache yapılandırmanızın simgelerini ( <Directory>direktifin altında) takip etmesine izin verilir Options FollowSymLinks.


Her bir vhost bildirimini düzenlemek istemem. 30'dan fazla var ... Artı, otomatik bir aşırı sürüş olmasını istiyorum, böylece yeni bir hayalet oluştururken hiçbir şey yapmam gerekmiyor.
Michael Berkompas

Michael, sadece toplu bir düzenleme yapmak için sed kullanın, oldukça kolay şeyler, kesinlikle elle yapmanıza gerek yok. Burada en altta nasıl yapılacağını ortaya koydu: blog.netflowdevelopments.com/2012/10/11/…
unc0nnected

0

Çözüme farklı yaklaşım.

Küme ortamımda birden çok (300'den fazla) sanal ana bilgisayar barındırıyorum. Sunucularımın tarayıcılar tarafından dövülmesini önlemek için, 10 saniye boyunca Tarama gecikmesini tanımlıyorum.

Ancak, tüm istemcileri sabit bir robots.txt yapılandırması ile zorlayamıyorum. Müşterilerimin isterse kendi robots.txt dosyasını kullanmasına izin verdim.

Yeniden yazma modülü önce dosyanın var olup olmadığını kontrol eder. Yoksa, modüller varsayılan yapılandırmamı yeniden yazar. Aşağıdaki kod örneği ...

Yeniden yazmayı dahili tutmak için takma ad kullanılmalıdır. Bazı kullanıcı tarafı çakışmalarına neden olabilecek yeni bir takma ad tanımlamak yerine, robots.txt dosyamı zaten varsayılan yapılandırma olarak bir takma adı olan / APACHE / error / klasörüne yerleştirdim.

<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>
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.