Nginx – Converting .htaccess to nginx. Rewrite not working as it should

.htaccessapache-2.4httpdnginxrewrite

I can't convert .htaccess to nginx config. I have been trying to use online convert tools. .htaccess to convert is following:

RewriteEngine on
RewriteCond %{REQUEST_URI} !/public
RewriteCond %{REQUEST_URI} !/index.php
RewriteRule ^(.*)$ index.php/?params=$1 [NC]

I have been trying to use following nginx config.:

location / {
    rewrite ^(.*)$ index.php/?params=$1;
}

This is just not working as it should. Also it gives access to other files in this directory. I want only index.php to be available. And even that needs to be working with .htaccess rules.

Installing apache/httpd is not possible on production server. And I don't want waste resources to run apache inside docker.

Best Answer

In Apache, you have these RewriteCond directives for excluding !/public and /index.php. In Nginx, just add a separate locations for them:

location /public {
}
location = /index.php {
}

Your rewrite is almost there, but unlike in Apache, the replacement string in Nginx is always root relative (not location relative) and should have the leading /. Also, I suggest removing the slash between php/? as unnecessary.

location / {
    rewrite ^(.*)$ /index.php?params=$1;
}
Related Topic