За последние 24 часа нас посетили 21528 программистов и 1027 роботов. Сейчас ищут 706 программистов ...

Перенсправление прямых ссылок на index.php

Тема в разделе "Настройка веб-сервера", создана пользователем ViT93, 3 фев 2019.

  1. ViT93

    ViT93 Новичок

    С нами с:
    3 фев 2019
    Сообщения:
    21
    Симпатии:
    0
    Всем привет. Не знаю как правильно задать вопрос но попробую.
    В htaccess с помощью rewrite engine делаю крассивые адреса типа.
    site.ru/forum
    Проблема заключается в следующем. Если в корне сайта есть такая директория то он откроет ее напрямую. Как сделать чтобы после site.ru/ можно было указывать имена папок которые есть в корне сайта и apach не думал что мы хотим открыть директорию на прямую
     
  2. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.902
    Симпатии:
    969
    Если это типовое правило рерайта (кстати, где листинг?) то достаточно убрать проверку на существование объектов в файловой системе и тогда будет жесткий рерайт всех запросов.
     
  3. ViT93

    ViT93 Новичок

    С нами с:
    3 фев 2019
    Сообщения:
    21
    Симпатии:
    0
    Можно пример как это сделать?
     
  4. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.902
    Симпатии:
    969
    Конечно можно. Код .htaccess в студию
     
  5. ViT93

    ViT93 Новичок

    С нами с:
    3 фев 2019
    Сообщения:
    21
    Симпатии:
    0
    Код (Text):
    1. AddType application/x-httpd-php .php .php5 .phtml .html .htm
    2. <FilesMatch ".(gif|jpg|jpeg|png|js|css)$">
    3. Header set Cache-Control "max-age=2592000"
    4. </FilesMatch>
    5. DirectoryIndex main/index.html
    6. RewriteEngine on
    7. RewriteBase /main/index.html
    8. RewriteCond %{REQUEST_FILENAME} !-d
    9. RewriteCond %{REQUEST_FILENAME} !-f
    10. RewriteRule ^([A-Za-z0-9-]+)$ index.html?page=$1 [QSA]
    11. RewriteRule ^([A-Za-z0-9-]+)/([A-Za-z0-9-]+)$ index.html?page=$1&val=$2 [QSA]
    12. RewriteRule ^([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/([A-Za-z0-9-]+)$ index.html?page=$1&val=$2&val2=$3 [QSA]
     
  6. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.902
    Симпатии:
    969
    Код (Text):
    1. RewriteCond %{REQUEST_FILENAME} !-d
    2. RewriteCond %{REQUEST_FILENAME} !-f
    "если в файловой системе нет такого каталога и нет такого файла то применяем правила ниже" - вот эту секцию убрать и тогда правила ниже будут выполняться безусловно

    Код (Text):
    1. RewriteRule ^([A-Za-z0-9-]+)$ index.html?page=$1 [QSA]
    2. RewriteRule ^([A-Za-z0-9-]+)/([A-Za-z0-9-]+)$ index.html?page=$1&val=$2 [QSA]
    3. RewriteRule ^([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/([A-Za-z0-9-]+)$ index.html?page=$1&val=$2&val2=$3 [QSA]
    для чистоты кода можно делать один рерайт на пхп-машину и уже внутри неё делать разбор исходного адреса запроса
    То есть:
    Код (Text):
    1. RewriteRule ^([A-Za-z0-9-]+)$ index.html [QSA]
    и внутри пхп-скриптов любоваться на $_SERVER['REQUEST_URI']

    ЗЫ. Почему расширение у файла - html?
     
  7. ViT93

    ViT93 Новичок

    С нами с:
    3 фев 2019
    Сообщения:
    21
    Симпатии:
    0
    Щас попробуем.
    Расширение у файла html для того чтобы сократить количество файлов на сайте, потому что зачастую на один php файл приходится один html. А так включил с помощью .htaccess использование php в html и файлов раза в два меньше. Если не прав поправьте.
    --- Добавлено ---
    Не работает всеравно лезет в каталог и открывает дерево
     
  8. ViT93

    ViT93 Новичок

    С нами с:
    3 фев 2019
    Сообщения:
    21
    Симпатии:
    0
    Самое интересное, что если использовать мои rewriteRule то
    При переходе site.ru/test открывается дерево каталога
    Если же ввести site.ru/test/123 то тут уже работает как надо
     
  9. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.902
    Симпатии:
    969
    Логически правильно оставить html-файл, который был придуман быть статическим - статическим html-файлом. Так веб-сервер быстрее отдаст его в поток и не будет выполнять лишние действия по запуску интерпретатора пхп и тот в свою очередь не будет заниматься разбором и выполнением лексем.

    Рекомендую включить отладку рерайтера и почитать логику разрешения запроса
     
  10. ViT93

    ViT93 Новичок

    С нами с:
    3 фев 2019
    Сообщения:
    21
    Симпатии:
    0
    Я обращаюсь на форумы только в самом крайнем случае, когда гугл совсем не помог с проблемой. Помогите пожалуйста с данной проблемой.
     
  11. ViT93

    ViT93 Новичок

    С нами с:
    3 фев 2019
    Сообщения:
    21
    Симпатии:
    0
    Как я понял, проблема таится тут
    Код (Text):
    1. ^([A-Za-z0-9-]+)$
    Так как попробовав изменить на это
    Код (Text):
    1. RewriteRule test main/index.html [QSA]
    Все заработало. Вопрос: ^([A-Za-z0-9-]+)$ где здесь ошибка?
     
  12. ViT93

    ViT93 Новичок

    С нами с:
    3 фев 2019
    Сообщения:
    21
    Симпатии:
    0
    Вопрос решен
     
  13. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.794
    Симпатии:
    650
    Как? Последовали совету выше? :)

    Что за хрень у вас в RewriteBase?
    --- Добавлено ---
    Не надо так делать. Делайте рерайт html- в php-файлы при наличии в последних. А чтобы не было дублей, «спрячьте» каталог с php-файлами.
    --- Добавлено ---
    И советую обратить особое внимание на совет про рерайт на фронт без «трансляции параметров». Гляньте мою статью Как сделать единую точку входа с ЧПУ?
     
  14. ViT93

    ViT93 Новичок

    С нами с:
    3 фев 2019
    Сообщения:
    21
    Симпатии:
    0
    Код (Text):
    1. RewriteEngine On
    2. RewriteCond %{REQUEST_FILENAME} !-f
    3. RewriteRule ^.* /index.php
    Этим вы просто вырубили на корню мою проблему с рерайтом. Спасибо. Тоесть вы советуете использовать исключительно php файлы а в них инклюдить html?
     
  15. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.794
    Симпатии:
    650
    Я не советую «инклюдить html», а советую парсить исходный адрес самостоятельно, чтобы не переливать из пустого в порожнее и не писать трехэтажные правила для сервера.
    --- Добавлено ---
    Сейчас почти все движки так работают ;)
    --- Добавлено ---
    ...если не полный парсинг адреса, то хотя бы проверка попадания под адресную маску из списка.
    --- Добавлено ---
    Реакция на результат парсинга/попадание по маску может быть совершенно различной. Что нужно, то и пишите в обработчиках.
     
  16. ViT93

    ViT93 Новичок

    С нами с:
    3 фев 2019
    Сообщения:
    21
    Симпатии:
    0
    Извините не совсем вас понимаю. На данный момент логика загрузки страниц следующая.
    1. Указываем в адресной строке страницу, которую хотим отобразить, допустим site.ru/profile
    2. С помощью .htaccess site.ru/profile перенаправляем в index.html
    3. В index.html подключается скриптовый файл с помощью которого мы получаем параметры из адресной строки.
    4. С помощью параметров получуных из ссылки подгружаем ajax нужный нам файл, в нашем случае допустим profile.html
     
  17. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.794
    Симпатии:
    650
    Я прежде всего вам советовал не делать «трансляцию параметров», т.е. не преобразовывать компоненты пути из исходного адреса в GET-параметры при рерайте. Вместо этого обрабатывать исходный адрес в скрипте самостоятельно. Что из себя представляет эта обработка, в данном случае не так важно. Можно сделать все, что угодно.

    Рерайт, PHP-код – все это работает исключительно на стороне сервера, с AJAX-ом непосредственно не связано. Чтобы вычитывать статичный html-файл AJAX-ом, собственная программная обработка на сервере вообще не требуется. Достаточно проверять статус на клиенте: получили ответ 404 - нет такого файла. Но можно и обрабатывать. Как именно, опять-таки не суть. Я бы например предпочел читать запись profile из БД, а не файл profile.html, например http://g09.ru/index.html
    --- Добавлено ---
    Вы своим .html только вносите путаницу. Из контекста не совсем понятно, profile.html – это статичный файл или требующий выполнения динамичный.
     
  18. ban_zay

    ban_zay Новичок

    С нами с:
    18 май 2018
    Сообщения:
    8
    Симпатии:
    1
    Зачем ajax то, просто выводим то что нам "надо" хоть ваш profile.html , если "надо" нет то 404
    А вы готовый сайт на чпу перводите или новое что то пишете?
    Сорри опоздал вам про ajax вроде объяснили...
     
    #18 ban_zay, 3 фев 2019
    Последнее редактирование: 3 фев 2019
  19. ViT93

    ViT93 Новичок

    С нами с:
    3 фев 2019
    Сообщения:
    21
    Симпатии:
    0
    Вы мне скинули вашу статью, я и воспользовался этим правилом RewriteRule ^.* main/index.html. Соотвественно теперь не преобразую в GET.
    Ни как не пойму, что вы пытаетесь сказать, по поводу того что я использую html файлы вместо php. У меня в htaccess включено рарешение в html использовать php. Чтобы избежать файлов типа index.php в котором лежит один единственный include ("homepage.html"); На мой взгляд проще создать файл homepage.html в котором с помощью php вывести допустим список новостей
    P.S. с вами можно связаться голосом?
    --- Добавлено ---
    Всмысле зачем ajax. Чтобы контент подгружался без надобности перезагружать всю страницу
    И да, пишу чтото новое
     
  20. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.794
    Симпатии:
    650
    К пред. посту. Да, AJAX зря приплели. Для AJAX-а «крассивые адреса» как раз-таки не требуются. Но если они нативные, то почему бы и не использовать. Можно даже по одним и тем же адресам выдавать соотв. контент и под AJAX-запросы и под обычные, например под AJAX-запросы – разметку только осн. содержимого, а под обычные – полную разметку страниц.
     
  21. ViT93

    ViT93 Новичок

    С нами с:
    3 фев 2019
    Сообщения:
    21
    Симпатии:
    0
    Понятное дело, что ajax и url никак не связаны. Я просто рассказал логику загрузки страниц. Страницы в формате html чтобы верстальщики смогли вестать в привычной им среде. Как во многих CMS вам не дается код движка, вам дается html страница которую вы и меняете под свои нужны. Тоже самое и я делаю.
     
  22. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.794
    Симпатии:
    650
    Вам уже два человека здесь сказали, что лучше так не делать.

    Вы используете самое популярное для php-фронта имя файла фиг знает с какой целью. Используйте единый фронт и выводите по адресу / главную.

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

    Нет.
    --- Добавлено ---
    ...можете задавать вопросы тут или в комментах к моей статье по ссылке выше.
    --- Добавлено ---
    А я вам написал, что для вычитывания статика AJAX-ом рерайт, пых на сервере вообще не нужны.

    Если это статик, пожалуйста. Но там не должно быть PHP-кода, поэтому и выполнять такие файлы не нужно. И верстальщики предпочитают работать с полными страницами, а в ответ на AJAX-запросы гораздо лучше отдавать только основное содержимое.
     
  23. ViT93

    ViT93 Новичок

    С нами с:
    3 фев 2019
    Сообщения:
    21
    Симпатии:
    0
    Проблема что мы немного не помнимаем друг друга. Мне нужно чтобы была единая html разметка для всех страниц

    HTML:
    1. </html>
    В эту разметку с помощью ajax между тегами <body></body> подгружается страница с помощью ajax.
    Вы предлагаете сделать чтобы рерайт всех адресов в файл index.php а уже в этом файле подключить понятный для верстальщиков файл html?
     
  24. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.794
    Симпатии:
    650
    К пред. посту. Кстати, у нас верстальщики вполне себе дружат с шаблонами основного содержимого без общего обвеса. Знают алг. структуры на пыхе для закручивания однотипных блоков в циклы и т.п.
     
  25. ViT93

    ViT93 Новичок

    С нами с:
    3 фев 2019
    Сообщения:
    21
    Симпатии:
    0
    А как тогда быть если я допустим хочу вывести на странице ник пользователя
    <div><?echo $username;?></div>
    Так тоже не привествуется?