mod_rewrite. .htaccess: что я еще забыл настроить?

xintrea

Новичок
Есть Apache 2.4.2 на Debian Linux 9. Апач ставил из стандартного репозитария, mod_rewrite тоже.

Корень сайта находится по пути /var/www/mysite. На этот каталог настроен виртуальный хост local-mysite.ru.

Для начала положил в корень index.php с вызовом phpinfo(). Проверил вывод: в разделе Loaded Modules вижу mod_rewrite.

Далее развернул тестовый сайт, его стартовый скрипт открывается по такому URL:

http://local-mysite.ru/appadv/frontend/web

и по такому тоже, само собой, открывается:

http://local-mysite.ru/appadv/frontend/web/index.php

Теперь мне нужно, чтобы когда в браузере открывается http://local-mysite.ru, следовал переход на вышеуказанный URL.

Для этого я написал .htaccess с таким содержимым:

Код:
Options +FollowSymLinks
IndexIgnore */*
RewriteEngine on

# Если запрос не начинается с web, добавляем его
RewriteCond %{REQUEST_URI} !^/(appadv/frontend/web)
RewriteRule (.*) /appadv/frontend/web/$1

# Если файл или каталог не существует, идём к /web/index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /appadv/frontend/web/index.php
Поверил его в онлайн-тестировщике http://htaccess.madewithlove.be. Там преобразование идет правильное.

Но на моем хосте преобразования URI не происходит!!

Для отладки отредактировал опцию в файле /etc/apache2/apache2.conf, чтобы видеть сообщения о редиректах:

Код:
LogLevel warn rewrite:trace4
Перезагрузил Apache. Обновил страницу с URL http://local-mysite.ru. Насколько я понимаю, в файле /var/log/apache2/error.log должны появиться строки, помеченные [rewrite...] или как-то так. Но ничего такого нет.

Я уже не знаю куда копать.
 
Последнее редактирование:

Andkorol

Новичок
Корень сайта находится по пути /var/www/mysite. На этот каталог настроен виртуальный хост local-mysite.ru.
...
Далее развернул тестовый сайт, его стартовый скрипт открывается по такому URL:
http://local-mysite.ru/appadv/frontend/web
Настрой виртуальный хост (DocumentRoot) на /var/www/mysite/appadv/frontend/web
 

xintrea

Новичок
Да, это очевидное решение. Но я хотел настроить именно rewrite. Потому что мне нужно в этом разобраться, на будущее.
 

xintrea

Новичок
Кстати, rewrite модуль есть, загружен в память:
Код:
# apachectl -M | grep rew
 rewrite_module (shared)
Боженьки, что ему еще надо?
 

xintrea

Новичок
Кароч, разобрался. Начиная с какой-то версии Апача, в дефолтном конфиге /etc/apache2/apache2.conf, для директории /var/www/ ставится защита от загрузки настроек из файла .htaccess. Делается это с помощью опции AllowOverride.

Поменял так, и rewrite заработало:

Код:
<Directory /var/www/>
   Options Indexes FollowSymLinks
#    AllowOverride None
   AllowOverride All
   Require all granted
</Directory>
 

AnrDaemon

Продвинутый новичок
Никогда не стоит менять настройки по умолчанию, если не понимаешь, зачем они сделаны так, а не иначе.
Я уже молчу о том, что само по себе использование .htaccess глупо. Почему не прописать всё в настройках хоста?
 

xintrea

Новичок
Потому что это сервер разработчика. На боевых серверах я вообще использую NGinx.
 

fixxxer

К.О.
Партнер клуба
А почему бы тогда и на сервере разработчика не использовать nginx? Нравится гадать, в чем разница между конфигами apache и nginx? :)
 

nefone

Новичок
что само по себе использование .htaccess глупо
В CodeIgniter повсеместно используется .htaccess для адресации всех запросов на index.php и для создания ЧПУ.
Кстати, rewrite модуль есть, загружен в память
в .htaccess это проверяется легко:
Код:
<IfModule mod_rewrite.c>
#делаем что надо...
</IfModule>
 

AnrDaemon

Продвинутый новичок
В CodeIgniter повсеместно используется .htaccess для адресации всех запросов на index.php и для создания ЧПУ.
Я должен впечатлиться и бежать переносить конфигурацию из VirtualHost в .htaccess ?
Или, всё таки, мне идиотские фреймворки не указ?
 
Сверху