Jak podawać różne pliki robots.txt dla http i https w tej samej witrynie?

11

Mam małą witrynę obsługiwaną przez Apache (nie mogę umieścić Nginx na początku ani zmienić Apache na nic) i jest skonfigurowana do obsługi tej samej witryny zarówno przez HTTP, jak i https (nie ma przekierowań http-> https, więc daleko, więc wersje HTTP i https są obsługiwane równolegle).

Potrzebuję skonfigurować .htaccesstaki sam identyfikator URI za pośrednictwem protokołu HTTP i https, aby obsługiwał inny plik tekstowy?

Jak http://example.com/proto.txtmówi „Witryna jest za pośrednictwem protokołu HTTP”, podczas gdy https://example.com/proto.txtmówi „Witryna jest obsługiwana przez protokół https”.

Kevin M.
źródło
Nie mam czasu, aby sprawdzić dokładny sposób napisania tego (a więc tylko komentarz, a nie odpowiedź), ale inną opcją, jeśli nie chcesz lub nie możesz zmienić głównej konfiguracji Apache, jest użycie a RewriteRulepod .htaccesswarunkiem, że jest obsługiwany przez https.
jcaron
@dcaron, to jest dokładnie to, czego potrzebuję, po prostu nie mogę dowiedzieć się, jak to zrobić dokładnie i potrzebuję porady lub (lepszego) fragmentu kodu, aby to zrobić :)
Kevin M
Twoje strony http i https znajdują się w różnych <VirtualHost>s. Musisz więc po prostu skonfigurować inny plik robots.txt w jednym z nich. Wokół:RewriteRule ^/robots.txt$ /path/to/alternative/robots.txt [L]
Peter - Przywróć Monikę

Odpowiedzi:

19

Użyj aliasu

Utwórz dwa pliki, robots.txt i robots_http.txt i dodaj to do http VirtualHost:

Alias "/robots.txt" "/path/to/documentroot/robots_http.txt"
Gerald Schneider
źródło
Nie można modyfikować ustawień vhosta, można edytować tylko .htaccess, to jest sztuczka.
Kevin M.
2

Jeśli nie możesz lub nie chcesz zmienić „głównej” konfiguracji Apache, ale musisz to zrobić w .htaccesspliku, możesz użyć RewriteRulenarzędzia, RewriteCondktóre sprawdza HTTPS.

Coś w stylu:

RewriteEngine On

RewriteCond %{HTTPS} "on"
RewriteRule robots.txt robots_https.txt [L]

powinno prawdopodobnie działać (nie testowałem tego).

Zauważ, że jest to oparte na tym, że Apache robi samo zakończenie HTTPS. Jeśli zakończenie HTTPS odbywa się na odwrotnym proxy przed nim, wówczas warunek będzie prawdopodobnie inny (i będzie zależał od konfiguracji zwrotnego proxy i Apache).

Jcaron
źródło