2-й уровень .htaccess не работает

0

Раньше у меня было два файла.htaccess в моем проекте, у нас есть следующие каталоги.

 MainProject/
      .htaccess        //first .htaccess
      public/
         .htaccess     //second .htaccess

Проекты работали нормально, но как только я удалил и установил apache, все изменилось.

Это.htaccess 1:

RewriteEngine On
RewriteRule ^$ public/     [L]
RewriteRule (.*) public/$1 [L]

И это.htaccess 2:

RewriteEngine On
RewriteCond %{REQUEST_URI} !/public/* [NC]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?url=$1 [L,QSA]

Я активировал модуль mod_rewrite.

Если я напишу в адресной строке:

Http://myproject.lan/

Он выводит меня на домашнюю страницу, что означает, что.htaccess 1 работает нормально.

Но когда я пишу что-то вроде:

Http://myproject.lan/login

Он не работает, и на нем отображается сообщение "страница не найдена".

Что происходит, когда проект работает, это /login = $ 1, поэтому он ищет public/login (в.htaccess 1)

Затем в общедоступном каталоге сервер выполняет второй.htaccess, где $ 1 соответствует /index.php?url=/login, который в конечном итоге отправляется на передний контроллер, ожидая обработки и преобразования в существующий маршрут.

Если есть что-то, что мне нужно включить на Apache, сообщите мне, потому что я забыл, как мне удалось заставить его работать прежде, в первую очередь.

спасибо

  • 1
    Вы уверены, что ваш .htaccess 1 просто отлично? Похоже, это просто попало на страницу индекса. Убедитесь, что вы изменили «AllowOverride» на « All в вашем файле apache config / vhost. Так что он обязательно прочитает файлы htaccess.
  • 0
    Спасибо, я уже добавил AllowOverride All, и htaccess 1 работает
Теги:
.htaccess
redirect
mod-rewrite

2 ответа

0
Лучший ответ

Я только нашел решение моей проблемы. Проблема в том, что в моем

HTTPD-vhosts.conf

Я забыл добавить /public в DocumentRoot.

спасибо

1

Ваш /public/.htaccess должен выглядеть следующим образом:

DirectoryIndex index.php
RewriteEngine On
RewriteBase /public/

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)$ index.php?url=$1 [L,QSA]

Проблема заключается в наличии условия RewriteCond %{REQUEST_URI} ! /public/* [NC] в этом.htaccess

  • 0
    Может быть, это может быть проблемой в других случаях, но для меня это не проблема ... Я просто нашел решение и опубликовал его
  • 0
    Спасибо мой друг +1
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню