Представим, что я создаю веб-приложение на базе AJAX. Это означает, что посетителям нужно будет загрузить только корень (или /index.html), тогда они смогут получить доступ к другим страницам только через AJAX. Это необходимо, поскольку index.html будет главной страницей, в то время как другие страницы будут загружаться только в #content в index.html с использованием ajaxify и history.js. Проблема возникает, когда кто-то заходит на такую страницу, как http://example.com/blah.html, прямо в браузере. Это приведет к отображению страницы, которая не только некрасива, но и лишена некоторой важной информации, уже присутствующей на index.html. В рамках задачи я не хочу отказывать пользователю в доступе к странице. Вместо этого я хотел бы перенаправить посетителя на index.html?url=somepage.html, а затем загрузить somepage.html через AJAX один раз на index.html. Поскольку сценарий загружает страницу в #content, а также обновляет URL-адрес, они окажутся на somepage.html, но теперь с разумной страницей.
Вот несколько идей (не решений), которые я мог придумать.
redirect.js на каждую страницу, чтобы проверить, была ли эта страница загружена через AJAX, затем условно перенаправить пользователя на index.html?url=somepage.html, но в случае, если приложение содержит слишком много страниц (более тысячи и постоянно растет), будет слишком много избыточности (неэффективный код). Опять же, это вообще выполнимо? Возможно, мне придется создать какой-нибудь сценарий, который будет читать каждый файл в приложении и включать указанный сценарий перед записью содержимого файла обратно ... Какое отличное решение!.js, но приложение должно быть полностью в HTML (то есть, пользователю доступны только файлы .html) и может использовать PHP только через AJAX (то есть PHP может быть доступен для использования на http://example.com/, но не на http://app.example.com для обеспечения гибкости. Вся суть приложения, написанного на HTML, состоит в том, чтобы иметь возможность использовать такие платформы, как Phonegap, как средство написания общего кода для не-веб-платформ, тогда как тот же код будет развернут на рабочем столе, когда один посещений через браузер). Есть ли способ динамически включать такой файл, как redirect.js, на каждую HTML-страницу при посещении пользователем?index.html?url=somepage.html, но как мне это сделать? Я понятия не имею. Фактически, мне понадобится точный код, который бы это сделал. Можно ли правильно закодировать URL-адрес, чтобы иметь возможность обрабатывать ситуации, когда somepage.html имеет собственные параметры запроса, такие как somepage.html?key=value&another_key=anothervalue в .htaccess? Обратите внимание, что использование .htaccess является жизнеспособным, поскольку пользователи не могли бы вводить URL-адреса напрямую, если бы они были локальной версией приложения для телефонной связи.Аналогичный вопрос был задан здесь, но и вопрос, и ответ немного двусмысленны, и ответ на самом деле не решает проблему, представленную здесь.
Как я мог видеть, прежде чем наконец решить спросить, многие разработчики борются с подобной проблемой. Помогите нам.
Предлагаем вам ознакомиться с принципами работы различных фреймворков одностраничных приложений. Помимо этого, этот вопрос слишком широк по объему, как указано в центр помощи.
Поместите все ваши файлы контроль в каталог, а затем запретите доступ к нему, если он не вызывается XMLHttpRequest - Например
@charlietfl Есть какая-нибудь конкретная ссылка, с которой вы бы посоветовали начать? Я не создаю приложение, а только собираю знания.
@charlietfl "слишком широк" в том смысле, что оставляет место для множества решений, а не потому, что цель вопроса неясна или слишком широка, чтобы дать однозначный ответ, верно? Я считаю несправедливым говорить, что вопрос «слишком широк по объему». Объем вопроса касается только перенаправления потерянного пользователя, и я не думаю, что это само по себе является слишком широким. Единственное, что здесь понятно, - это то, как можно решить проблему. Также обратите внимание, что ваша ссылка на справочный центр не объясняет, почему этот вопрос слишком широкий.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Добавить редирект для всего пути к сайту на стартовой странице необходимо: в файле .htaccess:
RewriteEngine on
RewriteRule ^(.*)$ index.html [L]
полный путь к строке браузера остается как:
www.site.com/index.html => загрузить index.html
www.site.com/somepage.html?key=value&another_key=anothervalue => загрузить index.html
в index.html нужно получить такое имя файла (php):
$file_name=basename($_SERVER['SCRIPT_NAME']); // somepage.html
и все получают параметры
$key=$_GET['key'] //value
во всем другом файле необходимо отключить контент, если запрос не ajax / xmlhttprequest нравится:
if (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest'){
exit;
}
//content if ajax only...
Хотя ваше использование PHP предполагает, что у меня будут мои файлы PHP вместе с HTML, это все равно не работает, потому что $_SERVER['HTTP_X_REQUESTED_WITH'] не возвращает 'xmlhttprequest', особенно когда я делаю запрос с помощью ajaxify. Это действительно странное поведение, хотя ваш ответ на правильном пути.
В принципе, от проверки Ajax можно отказаться. Поскольку .htaccess не позволяет браузеру загружать какие-либо файлы, кроме index.html.
Что ж, это будет означать, что все мое приложение будет состоять только из index.html, а не из какой-либо другой страницы. Это, конечно, нежелательный результат.
Было бы действительно полезно, если бы SO заставлял пользователей указывать причину для голосования против.