PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи

Страниц (1): [1]

> Найдено сообщений: 2
tol64 Отправлено: 08 Сентября, 2019 - 14:24:39 • Тема: Редактирование файла .htaccess • Форум: Apache и другие веб-серверы

Ответов: 3
Просмотров: 1589
teleoperator27 пишет:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. RewriteEngine On
  3. RewriteRule ^/GetSQL/users/(.*)$ /GetSQL/users/profile?user=$1 [L]


К сожалению, не помогло.
(Добавление)
Задача

Нужно преобразовать адрес вида:

    http://localhost/site/users/profile


в адрес вида:

    http://localhost/site/users/tol64


, но без перезагрузки страницы.

//---

Сейчас реализовано так, что при наведении курсора на ссылку показывается адрес

    http://localhost/site/users/tol64


, но переход осуществляется по

    http://localhost/site/users/profile.php


То есть в html вместо profile в ссылку подставляется никнейм авторизованного пользователя:

    <a class="profile" href="/site/users/<?php echo @$_SESSION['logged_user']; ?>">


, а при обработке клика по ссылке в javascript подменяем ссылку для перехода к нужному php-скрипту:

    const user_link = document.querySelector('.profile');
    if (user_link != undefined) {
    user_link.onclick = function() {
    this.href = 'http://localhost/site/users/profile';
    };
    }


В файле .htaccess есть преобразование убирающее расширение .php

    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME}\.php -f
    RewriteRule ^(.*)$ $1.php


Перепробовал множество различных вариантов. Ничего не помогает. Либо всё остаётся, как есть. Либо ошибка 404.

Одна из попыток приводящая к ошибке 404:

    RewriteRule ^users/(.*)$ /profile?user=$1


А вот этот вариант ошибок не выдаёт, но ничего не изменяет в адресной строке:

    RewriteRule ^/users/(.*)$ /profile?user=$1


Файл .htaccess находится в корневой директории:

    http://localhost/site


Как можно решить эту задачу? Может быть есть другие способы без редактирования .htaccess?

P.S. >

Попробовал применить предложенные на других сайтах решения. К сожалению это не дало нужно результата. Опишу, что сделал и что получил на этот раз.

В файле .htaccess теперь не производится попытки преобразования ссылки.

JS-код обработки клика на ссылке профиля пользователя теперь выглядит вот так:

    const user_link = document.querySelector('.profile');
    if (user_link != undefined) {
    user_link.onclick = function() {
    //--- Получаем никнейм из содержания элемента
    let user_name = this.innerText;
    //--- Блокируем переход по ссылке
    this.href = '#';
    //--- Добавляем в историю путь, который нужно отобразить в адресной строке
    window.history.pushState(null, null, "/site/users/" + user_name);
    //--- Подготовка запроса для сервера
    var xhr = AjaxRequest();
    //--- Путь к файлу с содержимым профиля
    let path = '/site/users/profile';
    //--- Асинхронный (true) GET-запрос для *.php
    xhr.open("GET", path, true);
    //--- Ожидаемый тип ответа
    xhr.responseType = 'text';
    //--- Запрос данных
    xhr.send();
    //--- Обработка ответа от сервера
    xhr.onload = function () {
    //--- Вернуться в истории на шаг назад
    window.history.back();
    //--- Переписать страницу присланным html-кодом от сервера
    document.write(xhr.response);
    }
    };
    }


После нажатия на ссылке профиля пользователя сначала блокируется переход по ней:

    this.href = '#';


и, если при обработке ответа от сервера не произвести шаг назад:

    window.history.back();


, то в адресной строке увидим следующий результат:

    http://localhost/site/users/tol64#


Шаг назад убирает символ #, но иногда видно, как он мигает.

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

Есть ли, какие-то общие правила, которые бы помогли реализовать описанную схему без таких проблем? Может быть, кто-нибудь порекомендует книгу, где описывается подобное, чтобы не изобретать велосипед? На многих сайтах такое реализовано.
tol64 Отправлено: 08 Сентября, 2019 - 10:04:19 • Тема: Редактирование файла .htaccess • Форум: Apache и другие веб-серверы

Ответов: 3
Просмотров: 1589
Добрый день.

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


Задача

Нужно преобразовать адрес вида:

    http://localhost/GetSQL/users/profile?user=tol64


в адрес вида:

    http://localhost/GetSQL/users/tol64


//---

Перепробовал множество различных вариантов. Ничего не помогает.
Либо всё остаётся, как есть. Либо ошибка 404.


(Добавление)
Одна из попыток приводящая к ошибке 404:

    RewriteRule ^users/(.*)$ /profile?user=$1


А вот этот вариант ошибок не выдаёт, но ничего не изменяет в адресной строке:

    RewriteRule ^/users/(.*)$ /profile?user=$1

Страниц (1): [1]
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB