วิธีสร้างไฟล์ robots.txt สำหรับโดเมนทั้งหมดบนเซิร์ฟเวอร์ Apache


10

เรามีการติดตั้งเว็บเซิร์ฟเวอร์ XAMPP Apache สำหรับการพัฒนาด้วยโฮสต์เสมือนและต้องการหยุดไม่ให้ serps รวบรวมข้อมูลเว็บไซต์ทั้งหมดของเรา สามารถทำได้อย่างง่ายดายด้วยไฟล์ robots.txt อย่างไรก็ตามเราไม่ควรรวม robots.txt ที่ไม่อนุญาตใน vhost ทุกอันแล้วต้องลบออกเมื่อเราใช้งานเว็บไซต์นี้กับเซิร์ฟเวอร์อื่น

มีวิธีใดที่ไฟล์ apache config จะเขียนคำร้องขอทั้งหมดไปยัง robots.txt บน vhosts ทั้งหมดไปยังไฟล์ robots.txt ไฟล์เดียวหรือไม่

ถ้าเป็นเช่นนั้นคุณช่วยยกตัวอย่างให้ฉันได้ไหม ฉันคิดว่ามันจะเป็นอย่างนี้:

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

ขอบคุณ!


robots.txt ไม่ได้บังคับและโปรแกรมรวบรวมข้อมูลบางอย่างจะไม่สนใจ ไม่ควรมองว่าเป็นคุณสมบัติความปลอดภัย หากคุณต้องการซ่อนเว็บไซต์ของคุณจนกว่าจะพร้อมให้สาธารณชนเพิ่มการรับรองความถูกต้อง
Mircea Vutcovici

คำตอบ:


25

Apache mod_aliasได้รับการออกแบบมาสำหรับสิ่งนี้และพร้อมใช้งานจากระบบ Apache หลักและสามารถตั้งค่าได้ในที่เดียวโดยแทบไม่มีค่าใช้จ่ายในการประมวลผลซึ่งแตกต่างจาก mod_rewrite

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

ด้วยบรรทัดนั้นในไฟล์ apache2.conf นอกhttp://example.com/robots.txtของ vhost นอกเว็บไซต์ที่ให้บริการจะส่งออกไฟล์ที่กำหนด


นี้. ใส่Aliasในแต่ละ<VirtualHost>บล็อก +1
Steven Monday

ขอบคุณ! มันทำงานได้อย่างสมบูรณ์ ฉันรู้ว่ามีวิธีที่ง่าย ...
ไมเคิล Berkompas

หากคุณต้องการมันในทุก ๆ โฮสต์เสมือนคุณไม่จำเป็นต้องใส่มันเข้าไปในโฮสต์ทั้งหมด สามารถก้าวไปสู่ระดับโลกได้เช่นเดียวกับนามแฝงเริ่มต้น / นามแฝงที่ทำเอง
Alister Bulman

ขอบคุณสำหรับการแก้ปัญหาแม้ว่าการเห็น C: / ในนั้นทำให้ฉันรู้สึกไม่สบายใจที่รู้ว่ามี windows server อื่นอยู่ที่นั่น :) ฉันใส่การแก้ไขในไฟล์ modules.conf ของฉันหรือใน mods-enabled / alias.conf เช่นนั้น: Alias /robots.txt /var/www/robots.txt
unc0nnected

1
เพื่อให้แน่ใจว่าไฟล์นี้จะสามารถใช้งานได้แม้ในขณะที่การควบคุมการเข้าถึงอื่น ๆ จะปิดกั้นให้ใส่นามแฝงและ<Location "/robots.txt"> Allow from all </Location>ทันทีหลังจากนั้นในส่วนหลัก<IfModule alias_module>
Walf

1

วางrobots.txtไฟล์โกลบอลทั่วไปของคุณไว้ที่ใดที่หนึ่งในระบบไฟล์ของเซิร์ฟเวอร์ที่สามารถเข้าถึงได้โดยกระบวนการ apache /srv/robots.txtเพื่อประโยชน์ของภาพประกอบที่ฉันจะถือว่าเป็นที่

จากนั้นในการตั้งค่าmod_rewriteเพื่อให้บริการไฟล์นั้นแก่ลูกค้าที่ร้องขอให้วางกฎต่อไปนี้ลงใน<VirtualHost>บล็อกการตั้งค่าของ vhost แต่ละอัน:

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

หากคุณวางกฎการเขียนซ้ำลงใน.htaccessไฟล์ต่อไดเรกทอรีแทนที่จะ<VirtualHost>บล็อกคุณจะต้องแก้ไขกฎเล็กน้อย:

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

คุณช่วยอธิบายเรื่องนี้ได้หรือไม่ "วางไฟล์ robots.txt ส่วนกลางของคุณไว้ที่ใดที่หนึ่งในระบบไฟล์ของเซิร์ฟเวอร์ของคุณที่สามารถเข้าถึงได้ในกระบวนการ apache เพื่อประกอบการอธิบายฉันจะถือว่าเป็น /srv/robots.txt" ในรายละเอียดเพิ่มเติม? ฉันจำเป็นต้องรู้ว่าคุณหมายถึงอะไรโดยการสร้างไดเรกทอรีให้กระบวนการ apache หรือไม่
Michael Berkompas

แต่ละไซต์มีอยู่ในโฟลเดอร์เช่น testsite.int.devcsd.com ภายใต้ C: \ xampp \ vhosts
Michael Berkompas

@Michael: อย่าไปสนใจmod_rewriteแฮ็คที่ซับซ้อนเกินไปนี้ ใช้Aliasแทนตามที่ Alister แนะนำ
Steven Monday

0

ไม่แน่ใจว่าคุณกำลังใช้งาน XAMPP บน Linux หรือไม่ แต่ถ้าคุณเป็นคุณสามารถสร้างsymlinkจากโฮสต์เสมือนทั้งหมดไปยังไฟล์ robots.txt เดียวกันได้ แต่คุณต้องแน่ใจว่าการกำหนดค่า Apache ของคุณสำหรับโฮสต์เสมือนแต่ละตัวนั้น ได้รับอนุญาตให้ติดตาม symlinks (ภายใต้<Directory>คำสั่งของOptions FollowSymLinks)


ฉันไม่ต้องการแก้ไขประกาศ vhost ทุกรายการ มีมากกว่า 30 ... นอกจากนี้ฉันต้องการให้มันเป็นแบบอัตโนมัติมากกว่าการขี่เพื่อที่ฉันจะได้ไม่ต้องทำอะไรเลยเมื่อสร้าง vhost ใหม่
Michael Berkompas

Michael แค่ใช้ sed เพื่อทำการแก้ไขโดยรวมเป็นเรื่องง่าย ๆ คุณไม่จำเป็นต้องทำเอง แสดงวิธีทำที่นี่ที่ด้านล่าง: blog.netflowdevelopments.com/2012/10/11/…
unc0nnected

0

วิธีการแก้ปัญหาที่แตกต่างกัน

ฉันโฮสต์โฮสต์เสมือน (มากกว่า 300) หลายแห่งในสภาพแวดล้อมแบบคลัสเตอร์ของฉัน เพื่อปกป้องเซิร์ฟเวอร์ของฉันจากการใช้ซอฟต์แวร์รวบรวมข้อมูลฉันกำหนดกำหนดการรวบรวมข้อมูลล่าช้าเป็นเวลา 10 วินาที

อย่างไรก็ตามฉันไม่สามารถบังคับลูกค้าทั้งหมดของฉันด้วยการกำหนดค่า robots.txt แบบคงที่ ฉันให้ลูกค้าใช้ robots.txt ของตัวเองหากพวกเขาต้องการจะทำ

โมดูลการเขียนซ้ำตรวจสอบก่อนว่าไฟล์ที่มีอยู่ หากไม่มีอยู่โมดูลจะเขียนลงในการกำหนดค่าเริ่มต้นของฉันอีกครั้ง ตัวอย่างโค้ดด้านล่าง ...

เพื่อให้สามารถเขียนซ้ำภายในได้ควรใช้นามแฝง แทนที่จะกำหนดนามแฝงใหม่ซึ่งอาจทำให้เกิดความขัดแย้งด้านผู้ใช้ฉันพบว่า robots.txt ของฉันภายใน / APACHE / error / โฟลเดอร์ที่มีนามแฝงเป็นค่าเริ่มต้นแล้ว

<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>
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.