LINUX.ORG.RU

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

 , ,


0

1

Есть 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...] или как-то так. Но ничего такого нет.

Я уже не знаю куда копать.

UPD1: Если это важно: по URL http://local-mysite.ru сейчас Апач отдает список файлов. А должен быть редирект.

UPD2: Модуль существует, и загружен:

# apachectl -M | grep rew
 rewrite_module (shared)
Боженьки, что ему еще надо?

★★★★★

Фух, нашел.

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

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

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

Xintrea ★★★★★ ()