Перенаправление на мой Laravel папка проекта

В моем файле .htaccess есть следующее содержимое. Я ожидал, что он будет перенаправлен в папку моего проекта / hc , которая находится на том же уровне, что и .htaccess . Перенаправление не происходит, но по-прежнему отображается содержимое index.html .

RewriteEngine On

RewriteBase /hc/

<Files .*>
    Order Deny,Allow
    Deny From All
</Files>

RewriteCond %{HTTP_HOST} ^example.com$ [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301]

RewriteRule ^(?:application|modules|system)\b.* index.php/$0 [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php?/$0 [PT,L,QSA]
1
задан 17 January 2017 в 15:39
2 ответа

Вам нужно разрешить опцию «перезаписать» в вашем конфигурационном файле apache «доступны для сайтов». Для laravel вы должны быть осторожны, потому что ваш DocumentRoot (общая папка, в которой вам нужен файл .htaccess) находится внутри папки проекта.

0
ответ дан 4 December 2019 в 05:21

Я ожидал, что он перенаправит в папку моего проекта / hc , которая в то же время уровень как .htaccess .

Вот в чем проблема. Если файл .htaccess находится в подкаталоге / hc , то он никогда не увидит запрос, если вы еще не включили подкаталог / hc в запрос.

Ваш файл .htaccess должен находиться в родительском каталоге. т.е. корень документа. (Между прочим, вам понадобится директива RewriteBase / hc / , только если этот файл находится в корне документа.)

Или добавьте дополнительный файл .htaccess в корень документа, который просто перенаправляет все запросы в ваш каталог / hc (ваш фронт-контроллер), например:

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

Обратите внимание, что, поскольку mod_rewrite не наследуется по умолчанию, после перезаписи запроса в / hc , файл .htaccess в подкаталоге затем обрабатывается и переопределяет директивы mod_rewrite в родительском файле .htaccess , поэтому вы не получите цикл перезаписи.


 RewriteRule. * index.php? / $ 0 [PT, L, QSA]
 

ОБНОВЛЕНИЕ: Ваша строка подстановки в последнем RewriteRule отличается от предыдущей директивы. Оба, вероятно, неверны. Вы можете удалить ? в приведенной выше директиве, если вы не намереваетесь предоставить нам строку запроса, тогда вам следует добавить ? в предыдущую директиву. В его нынешнем виде первый использует информацию о пути для передачи URL, второй - строку запроса .

Между прочим, флаг PT является избыточным в для каждого каталога .htaccess файлов. А если вы не используете строку запроса, то флаг QSA также можно удалить.

0
ответ дан 4 December 2019 в 05:21

Теги

Похожие вопросы