Я пытаюсь переместить старое приложение на 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
папки не указаны, и приложение не работает. Поэтому я ищу способ переписать его, не исключая внутренние папки.
Сброс вашего документа root
вернуться наверх. Попробуй это:
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;
}