В моем файле .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]
Вам нужно разрешить опцию «перезаписать» в вашем конфигурационном файле apache «доступны для сайтов». Для laravel вы должны быть осторожны, потому что ваш DocumentRoot (общая папка, в которой вам нужен файл .htaccess) находится внутри папки проекта.
Я ожидал, что он перенаправит в папку моего проекта
/ 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
также можно удалить.