Я пытаюсь переместить старое приложение на nginx с apache, но тут я завис.
/. Htaccess
RewriteEngine on
RewriteRule ^(.*) public/$1 [L]
/public/.htaccess
Options +Indexes +FollowSymLinks -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]
Структура действительно проста. В этом приложении есть
./application
./*back-end*
./vendor
./*back-end includes*
./public
./public/.htaccess <- this one
./*front-end*
./tests
./.htaccess <- this one
. Единственный способ, которым я заставил его работать, - это изменить сервер root
на ./ public
и добавить
location / {
if (!-d $request_filename){ set $rule_0 1$rule_0; }
if (!-f $request_filename){ set $rule_0 2$rule_0; }
if ($request_filename !~ "-l"){ set $rule_0 3$rule_0; }
if ($rule_0 = "321"){
rewrite ^/(.+)$ /index.php?url=$1 last;
}
} #from winginx convertor
, но в этом случае я за пределами . Папки / public
не учитываются, и приложение не работает. Поэтому я ищу способ его переписать, не исключая внутренние папки.
Сброс вашего документа корень
наверх . Попробуйте следующее:
location / {
try_files $uri $uri/ @public;
}
location @public {
rewrite ^ /public$request_uri last;
}
location /public {
try_files $uri $uri/ @rewrite;
}
location @rewrite {
rewrite ^/(.*)$ /public/index.php?url=$1 last;
}
Первый и второй блоки местоположения будут обслуживать внутренние файлы и гарантировать, что все остальное будет перезаписано в папку / public
(ваш первый набор правил .htaccess
).
Третий и четвертый блоки расположения будут обслуживать файлы из общей папки (если они существуют), а в противном случае вызывать сценарий /public/index.php
.
Я предполагаю, что у вас уже есть блок местоположения PHP .
Вышеупомянутое может быть излишним (я просто слежу за вашей реализацией Apache), и это также может сработать (пропуская несколько шагов):
location / {
try_files $uri $uri/ @rewrite;
}
location @rewrite {
rewrite ^/(.*)$ /public/index.php?url=$1 last;
}
Если вы не против начальная косая черта в параметре url
, его можно упростить до:
location / {
try_files $uri $uri/ /public/index.php?url=$uri;
}