Я пытаюсь перенести сайт под CodeIgniter с Apache на Nginx. Мои первые тесты показывают очень хорошие показатели, поэтому худшая попытка.
Но я не могу найти правильную Nginx конфигурацию для замены этих RewriteRules:
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php/$1 [L]
Я нашел этот рецепт на Nginx веб-сайте https://www.nginx.com/resources/wiki/start/topics/recipes/codeigniter/
location / { try_files $uri $uri/ /index.php; }
Это работает в большинстве случаев, за исключением случаев, когда у меня есть конечный sla sh. Значение http://example.com/controller/param/
вызовет http://example.com/controller/function/index.php (и вернет 404)
вместо http://example.com/index.php/controller/function/ ... как обычно это происходит с Apache перезаписью.
Я попытался добавить переписывание:
rewrite ^/(.*)/$ /$1 permanent;
Но это перенаправило POST в GET, поэтому я потерял все свои почтовые данные. ..
Любая подсказка?
Спасибо
Проверьте, помогает ли это. Заменить оба вхождения <source_directory>; с вашим правильным значением:
<source_directory>
server { listen 80 default_server; listen [::]:80 default_server; server_name _; root <source_directory>; rewrite_log on; index index.html index.php; # Load configuration files for the default server block. include /etc/nginx/default.d/*.conf; if ($host ~* ^www\.(.*)) { set $host_without_www $1; rewrite ^/(.*)$ $scheme://$host_without_www/$1 permanent; } # canonicalize codeigniter url end points # if your default controller is something other than "welcome" you should change the following if ($request_uri ~* ^(/welcome(/index)?|/index(.php)?)/?$) { rewrite ^(.*)$ / permanent; } # removes trailing "index" from all controllers if ($request_uri ~* index/?$) { rewrite ^/(.*)/index/?$ /$1 permanent; } # removes trailing slashes (prevents SEO duplicate content issues) if (!-d $request_filename) { rewrite ^/(.+)/$ /$1 permanent; } # removes access to "system" folder, also allows a "System.php" controller if ($request_uri ~* ^/system) { rewrite ^/(.*)$ /index.php?/$1 last; break; } # unless the request is for a valid file (image, js, css, etc.), send to bootstrap if (!-e $request_filename) { rewrite ^/(.*)$ /index.php?/$1 last; break; } # use fastcgi for all php files location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME <source_directory>$fastcgi_script_name; include fastcgi_params; } # deny access to apache .htaccess files location ~ /\.htaccess { deny all; } error_page 404 /404.html; location = /40x.html { } error_page 500 502 503 504 /50x.html; location = /50x.html { } }