Несколько доменов и одна папка - как управлять sitemap.xml?

У меня есть несколько доменов example-A.com, example-B.com и example-C.com, которые все разные, но все они указывают на одну и ту же папку на моем сервере (три домена очень тесно связаны, но управляются только через одно приложение Laravel, подробнее см. Несколько веб-сайтов с одной установкой Laravel)

Теперь мне нужно для каждого домена отдельный файл sitemap.xml.

Нашел в этот ответ, как выполнить PHP внутри файлов XML. Благодаря этому я мог динамически изменять содержимое sitemap.xml относительно url. Будет ли это работать для поисковых роботов и поисковых систем, если они попытаются получить доступ к XML-файлу? Или есть более рекомендуемый способ сделать это?

«Будет ли это работать для поисковых роботов и поисковых систем, если они попытаются получить доступ к XML-файлу?» - во-первых, они обращаются не к файл, а к ресурс, а во-вторых, почему бы и нет? То, что ваш сервер делает внутри для обслуживания контента за URL-адресом любой, абсолютно не имеет отношения к внешнему миру.
misorude 26.10.2018 09:14

@misorude, почему sitemap.xml не является файлом? Да, я так думал, но не был уверен. Извините, если мой вопрос вас обидел.

Adam 26.10.2018 09:37

Когда вы смотрите на него через локальную файловую систему, это файл. Как только вы начнете получать к нему доступ через HTTP (S) - что и будут делать сканеры, поскольку у них нет доступа к файловой системе вашего сервера - он перестает быть файлом, потому что HTTP не имеют понятие «файл ». Поэтому то, с чего считываются данные или как они динамически создаются вашим веб-сервером, не имеет значения для кого-либо извне.

misorude 26.10.2018 09:40
1
3
328
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Имейте маршрут, который соответствует sitemap.xml, но ведет к сценарию PHP. Затем этот скрипт обслуживает предварительно сгенерированный файл карты сайта или, возможно, даже генерирует его сам. Самый простой способ, который я могу себе представить, был бы:

# .htaccess
RewriteRule ^/sitemap.xml$ sitemap.php [L]

// sitemap.php
switch ($_SERVER['HTTP_HOST']) {
    case 'example-A.com':
        echo file_get_contents(__DIR__ . '/sitemap-A.xml');
        break;
    case 'example-B.com':
        echo file_get_contents(__DIR__ . '/sitemap-B.xml');
        break;
    // etc.
}

Я не знаю Laravel, но уверен, что есть способ создать маршрут, который соответствует /sitemap.xml и обслуживается каким-то контроллером.

Спасибо за идею! Возможно, лучше всего использовать RewriteRule на основе {HTTP_HOST}, а затем связать с sitemap-A.xml или sitemap-B.xml. Тогда не нужен sitemap.php и правило переключения.

Adam 26.10.2018 09:25

Другие вопросы по теме