Раньше у меня было два файла.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.
Если я напишу в адресной строке:
Он выводит меня на домашнюю страницу, что означает, что.htaccess 1 работает нормально.
Но когда я пишу что-то вроде:
Он не работает, и на нем отображается сообщение "страница не найдена".
Что происходит, когда проект работает, это /login = $ 1, поэтому он ищет public/login (в.htaccess 1)
Затем в общедоступном каталоге сервер выполняет второй.htaccess, где $ 1 соответствует /index.php?url=/login, который в конечном итоге отправляется на передний контроллер, ожидая обработки и преобразования в существующий маршрут.
Если есть что-то, что мне нужно включить на Apache, сообщите мне, потому что я забыл, как мне удалось заставить его работать прежде, в первую очередь.
спасибо
Я только нашел решение моей проблемы. Проблема в том, что в моем
HTTPD-vhosts.conf
Я забыл добавить /public
в DocumentRoot.
спасибо
Ваш /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
All
в вашем файле apache config / vhost. Так что он обязательно прочитает файлы htaccess.