.htaccess для редиректов с хеш-обратным восклицанием

Вопрос или проблема

Я создал сайт, который использует систему загрузки страниц с помощью javascript через /#!/ hashbang. Все мои URL содержат обработчики onclick, которые возвращают false, но сам тег href ведет на реальную ссылку. Вот пример:

<a href="/contact" onclick="loadPage('contact);return false;">Контакт</a>

Эта функция обрабатывает связь с сервером, и всё работает отлично.

Я хочу настроить файл .htaccess (если это возможно), чтобы переадресовывать пользователя без javascript (или паука) на страницу, которая на самом деле не существует. Я хочу, чтобы сервер перенаправлял пользователя на /#!/contact, не отправляя ответ 404.

Вот что я попробовал:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /#!/$1 [L]

Я ожидаю, что некоторые предложат, что это неправильный подход, но помимо этого, возможно ли это вообще?

(некоторые связанные страницы, которые не кажутся совсем релевантными:)

.htaccess 301 Перенаправление хеш-тега
https://stackoverflow.com/questions/15133023/hash-url-rewrite-in-htaccess
.htaccess 301 Перенаправление хеш-тега

Ответ или решение

К сожалению, ваша задача внедрения редиректа с использованием хеш-диапазона (hash-bang), то есть /#!/contact, через файл .htaccess вызывает определенные трудности, так как сервер не обрабатывает часть URL-адреса после знака #. Хеш-таблицы обрабатываются на стороне клиента браузером, и сервер не имеет доступа к этой информации.

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

  1. Создайте обертку для вашего контента: Вместо того чтобы пытаться редиректить на /#!/contact, создайте страницу /contact, которая будет служить для пользователей без JavaScript. На этой странице можно предоставить необходимую информацию, или же добавить сообщение, что требуется включить JavaScript для полнофункционального использования.

  2. Настройка .htaccess: Вы можете настроить .htaccess, чтобы обрабатывать запросы к несуществующим страницам, перенаправляя их на соответствующий путь. Вот пример того, как это можно сделать:

RewriteEngine On
RewriteBase /

# Если запрашивается существующий файл или директория, ничего не делаем
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# Тогда перенаправляем на страницу, которая объясняет, что требуются JavaScript для работы
RewriteRule ^(.*)$ /no-js.html [L]

В этом примере, если пользователь пытается получить доступ к /contact, он будет перенаправлен на /no-js.html, где вы можете информировать пользователя о необходимости включения JavaScript и дать ему альтернативные ссылки.

  1. Реализация клиентского редиректа: Если вам нужно, чтобы пользователи с поддержкой JavaScript автоматически перенаправлялись к нужному хешу после загрузки страницы, вы можете добавить скрипт на свою no-js.html, который будет делать редирект на нужный хеш, если JavaScript включен.
<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <title>JavaScript требуется</title>
    <script>
        window.onload = function() {
            window.location.href = "/#!/contact";
        }
    </script>
</head>
<body>
    <h1>Требуется JavaScript</h1>
    <p>Для просмотра содержимого этой страницы требуется включить JavaScript. Пожалуйста, включите его и перейдите по <a href="/#!/contact">ссылке</a>.</p>
</body>
</html>

Таким образом, вы обеспечите необходимую функциональность и позаботитесь о пользователях, не поддерживающих JavaScript.

Надеюсь, эти рекомендации помогут вам реализовать нужное поведение на вашем сайте.

Оцените материал
Добавить комментарий

Капча загружается...