Я пытаюсь перенести мое веб-приложение php из Apache в Nginx. И у меня есть огромная проблема с преобразованием правил перезаписи.Apache to nginx migration, переписать проблемы с .htaccess
Я использовал несколько преобразователей. Даже знаю, как преобразовать его сам, но в конце я заканчиваю с таким же результатом. Страница по умолчанию загружает исходный код php вместо показа страницы.
Если я установил корень непосредственно в общую папку и удалю правила перезаписи. Отображается страница по умолчанию, но без css, изображений и со сломанными ссылками. Но это похоже на то, что то же самое происходит локально (с Apache), если я устанавливаю DocumentRoot в общедоступный и удаляю файлы .htacces.
PHP использует структуру Phalcon. Файлы * .volt скомпилированы в * .volt.php во время «php runtime».
Вот мое дерево приложений.
<repo>
├── app
│ ├── config
│ │ ├── autoloader.php
│ │ ├── config.ini
│ │ └── services.php
│ ├── controllers
│ │ ├── CategoryController.php
│ │ ├── ControllerBase.php
│ │ ├── IndexController.php
│ │ ├── LoginController.php
│ │ ├── ProductController.php
│ │ ├── ProfileController.php
│ │ ├── RankController.php
│ │ └── SignupController.php
│ ├── library
│ │ └── Elements.php
│ ├── models
│ │ ├── Category.php
│ │ ├── CurlHandler.php
│ │ ├── OpinionVote.php
│ │ ├── Product.php
│ │ ├── REST.php
│ │ ├── Users.php
│ │ └── Validator.php
│ └── views
│ ├── category
│ │ └── show.volt
│ ├── index
│ │ └── index.volt
│ ├── index.volt
│ ├── layouts
│ │ ├── footer.volt
│ │ ├── leftColumn.volt
│ │ ├── logo.volt
│ │ └── topMenu.volt
│ ├── login
│ │ └── index.volt
│ ├── product
│ │ └── show.volt
│ ├── profile
│ │ ├── addCategory.volt
│ │ ├── addProduct.volt
│ │ ├── deleteCategory.volt
│ │ └── index.volt
│ ├── rank
│ │ ├── bottom.volt
│ │ ├── index.volt
│ │ └── top.volt
│ └── signup
│ └── index.volt
├── public
│ ├── css
│ │ └── main.css
│ ├── img
│ │ └── oceniarka-logo.png
│ ├── index.php
│ ├── scripts
│ │ └── opinionVoteJs.js
│ └── signup.php
└── README.md
В config.in BaseUri =/
Htaccesses
/.htaccess
RewriteEngine on
RewriteRule ^$ public/ [L]
RewriteRule ((?s).*) public/$1 [L]
/public/.htaccess
Options +FollowSymLinks
RewriteEngine On
RewriteRule ^.*/img/([a-zA-Z0-9-]+)[.]png$ img/$1.png [L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^((?s).*)$ index.php?_url=/$1 [QSA,L]
Это моя конфигурация nginx.
server {
listen ${OPENSHIFT_DIY_IP}:${OPENSHIFT_DIY_PORT};
server_name localhost;
root ${OPENSHIFT_REPO_DIR};
add_header Strict-Transport-Security max-age=691200;
location/{
index index.php index.html index.htm;
rewrite ^/$ /public/ break;
rewrite ((?s).*) /public/$1 break;
}
try_files $uri $uri/ @rewrites;
location /public {
rewrite ^/.*/img/([a-zA-Z0-9-]+)[.]png$ /img/$1.png last;
if (!-d $request_filename) {
set $rule_1 1$rule_1;
}
if (!-f $request_filename) {
set $rule_1 2$rule_1;
}
if ($rule_1 = "21") {
rewrite ^/((?s).*)$ /index.php?_url=/$1 last;
}
}
location = /robots.txt { access_log off; log_not_found off; }
location ~ /\. { access_log off; log_not_found off; deny all; }
location ~ ~$ { access_log off; log_not_found off; deny all; }
# Set expires max on static file types
location ~* ^.+\.(css|js|jpg|jpeg|gif|png|ico|gz|svg|svgz|ttf|otf|woff|eot|mp4|ogg|ogv|webm)$ {
access_log off;
log_not_found off;
# Some basic cache-control for static files to be sent to the browser
expires max;
add_header Pragma public;
add_header Cache-Control "public, must-revalidate, proxy-revalidate";
}
location @rewrites {
rewrite ^(.*)$ /index.php?_url=/$1;
}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
location ~ ^/index\.php(/|$) {
fastcgi_pass unix:${OPENSHIFT_RUN_DIR}/php-fpm.socket;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_script_name;
include fastcgi_params;
}
}
Я был бы признателен за любую помощь.
Используйте 'location ~ \ .php $' вместо 'location ~ ^/index \ .php (/ | $)' –
Я думал, что файлы .htaccess' не работают на nginx? – Darren