Encontrou uma solução muito mais simples. Seguindo o que CodeIgniter faz nos bastidores para URLs limpos; no Apache, essa reescrita funciona enviando cada solicitação como http://example.com/index.php?/controller/method
, que é então processada pelo CodeIgniter , portanto, o config.php
deve se parecer com
$config['base_url'] = 'http://example.com' $config['index_page'] = ''; $config['uri_protocol'] = 'REQUEST_URI';
Para conseguir o mesmo em nginx você teria que reescrever cada solicitação de maneira idêntica. Ajustei minha configuração do nginx com:
location /example { root /var/www/html/; index index.php; location ~ ^/example/(.+\.php)$ { fastcgi_buffer_size 128k; fastcgi_buffers 256 4k; fastcgi_busy_buffers_size 256k; fastcgi_temp_file_write_size 256k; root /var/www/html/; include /etc/nginx/snippets/fastcgi-php.conf; } location ~* ^/example/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt)) { root /var/www/html/; } # Enforce SSL if ($scheme = http) { return 301 https://$host$request_uri; } # CI rewrite rules if ($host ~* ^www\.(.*)) { set $host_without_www $1; rewrite ^/(.*)$ $scheme://$host_without_www/$1 permanent; } if ($request_uri ~* ^(/example/(US|EU|INT)/(en|de)(.*))?$) { rewrite ^/(.*)$ /example/index.php?/$1 last; } if ($request_uri ~* ^(/example/(US|EU|INT)/(en|de)/(.*))?$) { rewrite ^/(.*)$ /example/index.php?/$1 last; } # catch all error_page 404 /index.php; }
O link ausente existia em nginx regravar o log de depuração . Se você quiser saber sobre suas regras de reconfiguração e se elas correspondem ao seu conjunto de regras, adicione isso à configuração do nginx :
server{ ... rewrite_log on; error_log /var/log/nginx/error.log info; ... }
E o nginx fornecerá a você cada log de solicitação com uma correspondência ou não correspondência com o seu regex do PCRE. A partir daqui você pode ajustar sua configuração. Eu tive que prefixar o caminho (diretório) example
no arquivo de configuração nginx para que as regras de reconfiguração funcionem como esperado.