ReWriteCond %{REQUEST_URI} !^public/
ReWriteRule ^(.*)$ public/$1 [L]
Серверная переменная REQUEST_URI
начинается с sla sh, поэтому указанное выше условие никогда не будет совпадать. Например:
RewriteCond %{REQUEST_URI} !^/public/
RewriteRule (.*) public/$1 [L]
Однако, если у вас есть другой файл .htaccess
в подкаталоге /public
, я бы написал этот блок следующим образом:
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule (.*) public/$1 [L]
Это имеет добавлено преимущество, заключающееся в том, что в начале URL-адреса можно указать сегмент пути public
(если вы sh). например. URL /public/foo
будет внутренне переписан на /public/public/foo
без создания перезаписи l oop.
RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
RewriteRule ^ https://www.%1%{REQUEST_URI} [L,NE,R=301]
В первом условии отсутствует флаг OR
. Например:
RewriteCond %{HTTPS} off [OR]
:
Без этого он не сможет перенаправить http://www.example.com/
на HTTPS.
Просто чтобы уточнить, каноническое перенаправление должно go перед внутренней перезаписью на * Каталог 1028 *.
ОБНОВЛЕНИЕ:
РЕДАКТИРОВАТЬ: В папке publi c находится другой файл htaccess:
SetEnv APPLICATION_ENV "production"
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ /index.php [NC,L]
Неверная строка *1041* в последней директиве RewriteRule
. Вам необходимо удалить префикс sla sh из /index.php
. Стоит просто прочитать index.php
. В противном случае он перезапишет запрос обратно в документ root (путь к файловой системе) и приведет либо к бесконечному l oop, либо к 404 (в зависимости от родительских директив). Изменив его на index.php
(без sla * sh), теперь оно относительно каталога /public
(каталога, содержащего файл .htaccess
) вместо документа root.
. Вы также можете упростить шаблон RewriteRule
, и флаг NC
здесь не требуется. Итак, в итоге, файл /public/.htaccess
должен выглядеть так:
SetEnv APPLICATION_ENV "production"
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^ index.php [L]