How to rewrite this: apache to nginx

Hello, I am trying to rewrite for a webpage, some stuff from apache to
nginx, somehow I am not doing it right coz its not working… Can some
one help me to rewrite this:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L]

RewriteRule ^(./)?.svn(/|$) - [F,L]
RewriteRule ^(.
/)?api(/|$) - [F,L]
RewriteRule ^(./)?libs(/|$) - [F,L]
RewriteRule ^(.
/)?plugins(/|$) - [F,L]
RewriteRule ^(./)?storage(/|$) - [F,L]
RewriteRule ^(.
/)?templates(/|$) - [F,L]

to nginx?!

Thank you!

On Fri, Aug 29, 2008 at 10:54:38AM +0200, Robert G. wrote:

RewriteRule ^(./)?libs(/|$) - [F,L]
RewriteRule ^(.
/)?plugins(/|$) - [F,L]
RewriteRule ^(./)?storage(/|$) - [F,L]
RewriteRule ^(.
/)?templates(/|$) - [F,L]

to nginx?!

server {

root ...

location / {
    error_page  404 = /index.php;
}

location ~* \.php$ {
    ...
}

location ~* ^(.*/)?(\.svn|api|libs|plugins|storage|templates)(/|$) {
    return  403;
}

But what about this?

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L]

Igor S. wrote:

On Fri, Aug 29, 2008 at 10:54:38AM +0200, Robert G. wrote:

RewriteRule ^(./)?libs(/|$) - [F,L]
RewriteRule ^(.
/)?plugins(/|$) - [F,L]
RewriteRule ^(./)?storage(/|$) - [F,L]
RewriteRule ^(.
/)?templates(/|$) - [F,L]

to nginx?!

server {

root ...

location / {
    error_page  404 = /index.php;
}

location ~* \.php$ {
    ...
}

location ~* ^(.*/)?(\.svn|api|libs|plugins|storage|templates)(/|$) {
    return  403;
}

Igor S. wrote:

On Fri, Aug 29, 2008 at 11:13:20AM +0200, Robert G. wrote:

But what about this?

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L]

location / {
    error_page  404 = /index.php;
}

It doesnt work, I was thinking to do it like this:

if (!-f $request_filename) {
rewrite . /index.php last;
break;
}

But this doesnt work eider, the website doesnt seems to work and if I
dont use any rewrite rules I get 404 error and if I use the rules, its
just messed up.

On Fri, Aug 29, 2008 at 11:13:20AM +0200, Robert G. wrote:

But what about this?

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L]

location / {
    error_page  404 = /index.php;
}

On Fri, Aug 29, 2008 at 11:28:03AM +0200, Robert G. wrote:

    error_page  404 = /index.php;
}

It doesnt work, I was thinking to do it like this:

if (!-f $request_filename) {
rewrite . /index.php last;
break;
}

No, do not use this.

But this doesnt work eider, the website doesnt seems to work and if I
dont use any rewrite rules I get 404 error and if I use the rules, its
just messed up.

Could you show your configuration ?

The subdomain config:

server {
listen 80;
server_name helpdesk.visualserver.org *.helpdesk.visualserver.org;

access_log /var/log/nginx/helpdesk-access_log;
error_log /var/log/nginx/helpdesk-error_log;

location / {
root /srv/www/helpdesk;
index index.php index.html index.htm;
error_page 404 = /index.php;
}

location ~* ^(.*/)?(.svn|api|libs|plugins|storage|templates)(/|$) {
return 403;
}

    location ~* \.php$ {
        fastcgi_pass   127.0.0.1:50000;
        fastcgi_index  index.php;

                fastcgi_param  SCRIPT_FILENAME 

/srv/www/helpdesk$fastcgi_script_name;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;
# PHP only, required if PHP was built with
–enable-force-cgi-redirect
fastcgi_param REDIRECT_STATUS 200;
}

#error_page 404 /404.html;

redirect server error pages to the static page /50x.html

error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /var/www/nginx-default;
}

}

nginx config:

user www-data;
worker_processes 2;

pid /var/run/nginx.pid;
error_log /var/log/nginx/error_log info;

events {
worker_connections 1024;
use epoll;
}

http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
server_tokens off;
server_names_hash_bucket_size 128;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 4;
gzip on;
gzip_min_length 1100;
gzip_comp_level 2;
gzip_types text/plain text/html text/css;

include         /etc/nginx/sites-enabled/*;
include         /etc/nginx/sites-users/*;
include        /etc/nginx/sites-virtual/*;

}

So thats about it…

Igor S. wrote:

On Fri, Aug 29, 2008 at 11:41:51AM +0200, Robert G. wrote:

The subdomain config:

Does simple http://helpdesk.visualserver.org/index.php work ?

Probably you need to move
root /srv/www/helpdesk;
to server level to inherit it in “location ~* .php$” and to get
right $document_root variable in fastcgi_param.

PS. looking at these indentions I’m starting to understand python more
and more.

Yes http://helpdesk.visualserver.org/index.php works, but when I try to
login everything starts to be screwed up.

On Fri, Aug 29, 2008 at 11:41:51AM +0200, Robert G. wrote:

The subdomain config:

Does simple http://helpdesk.visualserver.org/index.php work ?

Probably you need to move
root /srv/www/helpdesk;
to server level to inherit it in “location ~* .php$” and to get
right $document_root variable in fastcgi_param.

PS. looking at these indentions I’m starting to understand python more
and more.

Igor S. wrote:

On Fri, Aug 29, 2008 at 12:46:12PM +0200, Robert G. wrote:

right $document_root variable in fastcgi_param.

PS. looking at these indentions I’m starting to understand python more
and more.

Yes http://helpdesk.visualserver.org/index.php works, but when I try to
login everything starts to be screwed up.

The login page POSTs to /index.php/, then browser gets various URLs
like:
/index.php/styles/default/cerberus.css?v=726

Is it correct ?

Yeah something like that, or
http://helpdesk.visualserver.org/index.php/login

On Fri, Aug 29, 2008 at 12:46:12PM +0200, Robert G. wrote:

right $document_root variable in fastcgi_param.

PS. looking at these indentions I’m starting to understand python more
and more.

Yes http://helpdesk.visualserver.org/index.php works, but when I try to
login everything starts to be screwed up.

The login page POSTs to /index.php/, then browser gets various URLs
like:
/index.php/styles/default/cerberus.css?v=726

Is it correct ?

Done that, doesnt work, I really cant get the idea why it doesnt work…
This is shitty :frowning:

P.S. this is cerb4 (cerberus helpdesk)

Robert G. wrote:

Done that, doesnt work, I really cant get the idea why it doesnt work…

What is in a error log ?

Actually in /var/log/nginx/helpdesk-error_log I dont have any errors and
in access_log seems everything ok.

On Fri, Aug 29, 2008 at 01:10:47PM +0200, Robert G. wrote:

The login page POSTs to /index.php/, then browser gets various URLs
like:
/index.php/styles/default/cerberus.css?v=726

Is it correct ?

Yeah something like that, or
http://helpdesk.visualserver.org/index.php/login

Then you need to change

  •   location ~* \.php$ {
    
  •   location ~* \.php(/|$) {
    

On Fri, Aug 29, 2008 at 01:45:59PM +0200, Robert G. wrote:

Done that, doesnt work, I really cant get the idea why it doesnt work…
This is shitty :frowning:

P.S. this is cerb4 (cerberus helpdesk)

Then you probably need to add PATH_INFO:

    location  ~* \.php(/|$) {

         set $path_info "";

         if ($uri ~ \.php(/.+)$) {
             set $path_info $1;
         }

         ...
         fastcgi_param   PATH_INFO  $path_info;
         ...
    }

set $path_info “”; this blank or where the scripts are?

I suppose something like this:

    location ~* \.php(/|$) {
        fastcgi_pass   127.0.0.1:50000;
        fastcgi_index  index.php;
         set $path_info "";
         if ($uri ~ \.php(/.+)$) {
             set $path_info $1;
                    }
                fastcgi_param  SCRIPT_FILENAME 

/srv/www/helpdesk$fastcgi_script_name;
fastcgi_param PATH_INFO $path_info;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
}

Good, it doesnt work :slight_smile:

On Fri, Aug 29, 2008 at 04:18:52PM +0200, Robert G. wrote:

Good, it doesnt work :slight_smile:

Could you create debug log ?