За последние 24 часа нас посетили 20472 программиста и 1095 роботов. Сейчас ищут 389 программистов ...

ошибка в .htaccess

Тема в разделе "Регулярные выражения", создана пользователем sushko, 26 дек 2019.

  1. sushko

    sushko Новичок

    С нами с:
    17 июл 2019
    Сообщения:
    78
    Симпатии:
    8
    В сайте, кот. я делаю, есть раздел "для всех", "личный кабинет" и "панель администратора" - соответственно, папки "/", "/account/" и "/admin/"; есть еще папка "/photo/". В .htaccess я хочу настроить так, чтобы при попытке зайти куда-либо кроме этих папок посетитель перенаправлялся в index.php одной из этих папок, либо в корневую /index.php.

    Написал так:

    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !^account|admin|photo
    RewriteRule ^(.*)$ index.php
    Options -Indexes


    Что не нравится:

    1. При попытке по http зайти в /admin/mama.php (такого файла нет) посетителю отдается 404 вместо редиректа на /admin/index.php либо (хуже) /index.php

    2. При попытке зайти в /mama/ (такая папка может быть и может не быть - неважно) посетителю отдается правильный контент из /index.php, но текущей папкой считается не / , а /mama/ и, соответственно, ломаются все относительные ссылки

    Как исправить?
     
  2. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.787
    Симпатии:
    646
    0. Единая точка входа.

    1. Не надо показывать, где находится вход в вашу админку. Наоборот его нужно тщательно спрятать.

    2. Используйте абс. адресацию.
    --- Добавлено ---
    P.S. Корректировку адреса редиректом можно выполнять, но только для авторизованного админа.
     
  3. sushko

    sushko Новичок

    С нами с:
    17 июл 2019
    Сообщения:
    78
    Симпатии:
    8
    1. Как прятать точку входа в админку? Придумать левое имя для раздела, например, www.site.com/fghjkghjk/ ?
     
  4. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.787
    Симпатии:
    646
    Вариантов масса. Я обычно вообще не смешиваю морду сайта и админку. Например, админка может быть на непубличном (под)домене или на www-поддомене.
     
  5. sushko

    sushko Новичок

    С нами с:
    17 июл 2019
    Сообщения:
    78
    Симпатии:
    8
    А в чем разница между http://admin.site.com (непубличный поддомен) и http://www.site.com/admin ? Почему первый вариант называется "спрятать админку в непубличный поддомен", а второй называется "не спрятанная админка"?
     
  6. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.787
    Симпатии:
    646
    Непубличный (под)домен – это тот, которого нет на публичных DNS-серверах ;) Например, можешь прописать его на локалке в файле hosts. Форму входа тоже можно держать на локалке.
     
  7. sushko

    sushko Новичок

    С нами с:
    17 июл 2019
    Сообщения:
    78
    Симпатии:
    8
    А, ну да, торможу, сорри :) Нет, такой вариант, к сожалению, не подходит: я делаю систему аренды интернет-магазинов; админка - это админка конкретного арендованного кем-то интернет-магазина.

    А какой еще есть хороший способ спрятать админку магазина в этом случае?
     
  8. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.734
    Симпатии:
    1.315
    Адрес:
    Лень
    и на этом остановимся.
     
    Dron-Boy нравится это.
  9. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.787
    Симпатии:
    646
    Да, для SaaS нет смысла прятать админку продавцов. Хотя в общем-то можете сделать wildcard и выдавать админам поддомены с их логинами специально для админки. Но по сложности подбора это почти то же самое, что и просто логины к форме входа подбирать.
    --- Добавлено ---
    P.S. Но в SaaS еще должна быть админка «суперадмина» (ваша), которую имеет смысл закрывать спец. методами, о которых я писал выше.
     
  10. sushko

    sushko Новичок

    С нами с:
    17 июл 2019
    Сообщения:
    78
    Симпатии:
    8
    OK, спасибо. А давайте вернемся теперь к исходному вопросу? Что неправильно в .htaccess - см.первое сообщение темы?
     
  11. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.734
    Симпатии:
    1.315
    Адрес:
    Лень
    Тебе уже писали черным по белому - сделай единую почку
    --- Добавлено ---
    Это очень изи
     
  12. sushko

    sushko Новичок

    С нами с:
    17 июл 2019
    Сообщения:
    78
    Симпатии:
    8
    OK, есть единая точка входа - /index.php. На сервере присутствует папка /libs/ , в которую посетителям ходить не надо. Как закрыть от посетителей эту папку?
     
  13. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.734
    Симпатии:
    1.315
    Адрес:
    Лень
    в папку кинь htaccess
    Код (Text):
    1. Order allow,deny
    2. Deny from all
     
  14. Roman __construct

    Roman __construct Активный пользователь

    С нами с:
    27 апр 2019
    Сообщения:
    1.270
    Симпатии:
    112
    /libs/.htaccess
    Код (Text):
    1. Order Allow,Deny
    2. Deny from All
     
  15. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.787
    Симпатии:
    646
    Что это за папка? Папке, «в которую посетителям ходить не надо», не место в паблик каталоге ;)

    Но если это не подвластно вашему понимаю, см. выше. Или вот аналог для «основного» .htaccess, чтобы не создавать дополнительные:
    Код (Text):
    1. RewriteRule ^libs/ - [NC,F]
    --- Добавлено ---
    P.S. Конечно, если на фронте работает сервер, отдающий статик и т.п., то это правило не защитит такой статик и т.п.
     
  16. sushko

    sushko Новичок

    С нами с:
    17 июл 2019
    Сообщения:
    78
    Симпатии:
    8
    Да, спасибо, почему-то не подумал о том, что у папки может быть отдельный .htaccess :) Но - по возможности - не хотелось бы плодить .htaccess'ы, мне кажется более концептуальным вариант написать один htaccess для всех.

    Итак, что неправильно в моем .htaccess'е?

    Что такое папка libs? Ну, очевидно, какие-то PHP-библиотеки, используемые PHP-кодом сайта. Какие именно - имхо неважно в контексте обсуждения.

    Мне кажется, мой вариант - "запретить все кроме account|admin|photo" - предпочтительнее Вашего, где требуется перечислять все, что нужно запретить.

    Итак, что неправильно в моем .htaccess'е?
     
  17. Roman __construct

    Roman __construct Активный пользователь

    С нами с:
    27 апр 2019
    Сообщения:
    1.270
    Симпатии:
    112
    ну выставьте на /libs/ и все файлы в ней права 750 или типа того

    по идее это тоже решит вашу задачу
     
  18. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.787
    Симпатии:
    646
    Мой вариант был тот, который вы успешно проморгали:
    И не мешайте мух с котлетами, а именно местоположение либ с адресами.

    По вашему .htaccess я ответил в самом начале. Если не понятно, скажу конкретнее: там лишнее как раз то условие, которое вам показалось предпочтительнее моего правила, написанного совсем по др. поводу ;)
    --- Добавлено ---
    P.S. Под паблик каталогом я подразумеваю целиком ветку корневого каталога сайта. Если разместить либы в др. ветке, то их вообще специально закрывать не надо ;)
    --- Добавлено ---
    P.P.S. Почитайте концовку этой статьи.
     
  19. gruth

    gruth Активный пользователь

    С нами с:
    13 май 2017
    Сообщения:
    224
    Симпатии:
    18
    Не прокатит вообще ни как. Apache запускаются от www-data, и юзер смотрит страницы от www-data. Закроешь доступ к папке, скрипты работать не будут.

    Почему нельзя index.php в паблик кинуть, а все остальное за rootdirectory? Это единственны годный вариант.
    По поводу htaccess, либо модуль не включён в апаче, либо у апача нет на это прав(прописаны в apache.conf)
     
  20. Roman __construct

    Roman __construct Активный пользователь

    С нами с:
    27 апр 2019
    Сообщения:
    1.270
    Симпатии:
    112
    Я обычно апач запускаю от имени юзера-вебмастера :) оч удобно :)