Как я могу иметь разрабатываемые и производственные версии robots.txt на Google App Engine (PHP)?

У меня есть веб-сайт / приложение, которое может работать в стандартной среде веб-хостинга и в Google App Engine. Поэтому я занимаюсь разработкой на Cloud9, внедряю тестовые версии (через GitHub) по URL-адресу appspot.com и, в конечном счете, к проекту GAE, связанному с настраиваемым доменом.

Я хотел, чтобы веб-сканеры были полностью запрещены на сайтах разработки и имели доступ к рабочему сайту. Но я не хотел иметь задачу управления разными версиями файла robot.txt.

То, что я разработал, опубликовано в качестве ответа ниже. Возможно, это будет полезно для других, или, возможно, у кого-то есть более элегантное решение.

постскриптум Я читаю наиболее подходящий этикет для тех, кто спрашивает и сразу же отвечает на свой вопрос. Было различие во мнениях, в первую очередь разделенных между теми, кто полагал, что ответ должен остаться в вопросе (чтобы не выглядеть так, как будто кто-то пытается повысить свою репутацию) по сравнению с публикацией официального ответа. Я выбираю последнее, исходя из логики: если человек ищет ответ и видит сообщение с 0 ответами, он не будет знать, что может быть решение, которое он мог бы рассмотреть.

0

Решение

Мое решение состоит в том, чтобы PHP генерировал ответ.

Поскольку у меня нет других причин для обслуживания текстовых файлов, файл app.yaml изменяется так, что запрос к любому расширению .txt запускает основной сценарий (который включен в index.php) …

- url: /(.*\.(txt$))
script: index.php

PHP-скрипт анализирует URL-адрес …

$argument = basename(parse_url($_SERVER["REQUEST_URI"], PHP_URL_PATH));
if ($argument !== "" && $argument !== "index.php") {
if ($argument == "robots.txt") {
$action = "answerRobot";
}
elseif ($argument == "_________") {
// Other things I look for such as translating directory
// requests into actions. For instance website.com/admin
// (a non-existent directory) triggers an admin function
// in the main script.
}
}

Затем я проверяю, в какой среде я нахожусь — сначала я работаю в GAE, а затем в каком проекте …

if (strpos(getcwd(), "/base/data/home/apps/s~____") > -1) {
$appEngine = true;

if (strpos($_SERVER["APPLICATION_ID"], "dev") > -1) {
$crawlable = false;
}
else {
$crawlable = true;
}
}

Наконец, я генерирую содержимое robots.txt, если требуется …

if ($action == "answerRobot") {
header("Content-type: text/plain");

if ($crawlable) {
$content = "User-agent: *". "\nDisallow: /code/". "\nDisallow: /icons/". "\nDisallow: /specific_file.ext". "\nDisallow: /specific_file.ext";
}
else {
$content = "User-agent: *". "\nDisallow: /";
}
echo $content;
exit();
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]