Все просто: с помощью пхп отдаешь клиенту пустой html в котором есть подключение app.js и в боди html есть что то типа
По крайней мере на вью так.
Есть и другой подход. Пхп вообще не участвует в генерации штмл, он написан один раз, статически, отдает его клиенту nginx.
Проверка ip средствами веб сервера, но если хочется пхп - проверяешь и отдаешь 404 без 'div id=app