Обработка прямого доступа к файлам .html

Представим, что я создаю веб-приложение на базе 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, но в случае, если приложение содержит слишком много страниц (более тысячи и постоянно растет), будет слишком много избыточности (неэффективный код). Опять же, это вообще выполнимо? Возможно, мне придется создать какой-нибудь сценарий, который будет читать каждый файл в приложении и включать указанный сценарий перед записью содержимого файла обратно ... Какое отличное решение!
  • Используйте PHP для автоматического включения файла .js, но приложение должно быть полностью в HTML (то есть, пользователю доступны только файлы .html) и может использовать PHP только через AJAX (то есть PHP может быть доступен для использования на http://example.com/, но не на http://app.example.com для обеспечения гибкости. Вся суть приложения, написанного на HTML, состоит в том, чтобы иметь возможность использовать такие платформы, как Phonegap, как средство написания общего кода для не-веб-платформ, тогда как тот же код будет развернут на рабочем столе, когда один посещений через браузер). Есть ли способ динамически включать такой файл, как redirect.js, на каждую HTML-страницу при посещении пользователем?
  • Используйте Apache (.htaccess) для автоматического перенаправления на index.html?url=somepage.html, но как мне это сделать? Я понятия не имею. Фактически, мне понадобится точный код, который бы это сделал. Можно ли правильно закодировать URL-адрес, чтобы иметь возможность обрабатывать ситуации, когда somepage.html имеет собственные параметры запроса, такие как somepage.html?key=value&another_key=anothervalue в .htaccess? Обратите внимание, что использование .htaccess является жизнеспособным, поскольку пользователи не могли бы вводить URL-адреса напрямую, если бы они были локальной версией приложения для телефонной связи.

Аналогичный вопрос был задан здесь, но и вопрос, и ответ немного двусмысленны, и ответ на самом деле не решает проблему, представленную здесь.

Как я мог видеть, прежде чем наконец решить спросить, многие разработчики борются с подобной проблемой. Помогите нам.

Было бы действительно полезно, если бы SO заставлял пользователей указывать причину для голосования против.

Supreme Dolphin 08.08.2018 17:33

Предлагаем вам ознакомиться с принципами работы различных фреймворков одностраничных приложений. Помимо этого, этот вопрос слишком широк по объему, как указано в центр помощи.

charlietfl 08.08.2018 17:35

Поместите все ваши файлы контроль в каталог, а затем запретите доступ к нему, если он не вызывается XMLHttpRequest - Например

CD001 08.08.2018 17:37

@charlietfl Есть какая-нибудь конкретная ссылка, с которой вы бы посоветовали начать? Я не создаю приложение, а только собираю знания.

Supreme Dolphin 08.08.2018 17:37

@charlietfl "слишком широк" в том смысле, что оставляет место для множества решений, а не потому, что цель вопроса неясна или слишком широка, чтобы дать однозначный ответ, верно? Я считаю несправедливым говорить, что вопрос «слишком широк по объему». Объем вопроса касается только перенаправления потерянного пользователя, и я не думаю, что это само по себе является слишком широким. Единственное, что здесь понятно, - это то, как можно решить проблему. Также обратите внимание, что ваша ссылка на справочный центр не объясняет, почему этот вопрос слишком широкий.

Supreme Dolphin 08.08.2018 18:02
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
5
212
1

Ответы 1

Добавить редирект для всего пути к сайту на стартовой странице необходимо: в файле .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. Это действительно странное поведение, хотя ваш ответ на правильном пути.

Supreme Dolphin 08.08.2018 20:00

В принципе, от проверки Ajax можно отказаться. Поскольку .htaccess не позволяет браузеру загружать какие-либо файлы, кроме index.html.

mscdeveloper 08.08.2018 20:23

Что ж, это будет означать, что все мое приложение будет состоять только из index.html, а не из какой-либо другой страницы. Это, конечно, нежелательный результат.

Supreme Dolphin 08.08.2018 21:02

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