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