Can some1 please convert this htaccess to nginx rewrite?


#1

i got a signup verification script for my forum that shows images
and asks the user to match it with the provided word
it worked fine when i was using apache but today after
i made the switch to nginx the images dont load anymore
this script have an .htaccess file that contains:
RewriteEngine on
RewriteRule (.*) /show.php

can someone please convert it to nginx rewrite?
also i’m not sure if it matters but the full path
to the .php file is /usr/share/nginx/html/forum
another small problem i have is that if i get into
http://mysite/forum it doesnt load the page,but if i add
a secondary slash however as in /forum/ it works fine
how can i fix it? thanks in advance


#2

On Thu, Jan 15, 2009 at 08:53:55PM +0100, Lemon Head wrote:

to the .php file is /usr/share/nginx/html/forum
another small problem i have is that if i get into
http://mysite/forum it doesnt load the page,but if i add
a secondary slash however as in /forum/ it works fine
how can i fix it? thanks in advance

Something like this:

 location /forum {
     fastcgi_pass  ...;
     fastcgi_param  SCRIPT_FILENAME 

/usr/share/nginx/html/forum/show.php;
include fastcgi_params;
}


#3

Igor S. wrote:

On Thu, Jan 15, 2009 at 08:53:55PM +0100, Lemon Head wrote:

to the .php file is /usr/share/nginx/html/forum
another small problem i have is that if i get into
http://mysite/forum it doesnt load the page,but if i add
a secondary slash however as in /forum/ it works fine
how can i fix it? thanks in advance

Something like this:

 location /forum {
     fastcgi_pass  ...;
     fastcgi_param  SCRIPT_FILENAME 

/usr/share/nginx/html/forum/show.php;
include fastcgi_params;
}

first of,thx for your help
i tried that but then nginx failed to start
with this error: “Starting nginx: 2009/01/15 16:36:41 [emerg] 23287#0:
location “/forum” is outside location “/forum/” in
/etc/nginx/nginx.conf:121”

heres my whole config , maybe it will help

#######################################################################

This is the main Nginx configuration file.

More information about the configuration options is available on

* the English wiki - http://wiki.codemongers.com/Main

* the Russian documentation - http://sysoev.ru/nginx/

#######################################################################

#----------------------------------------------------------------------

Main Module - directives that cover basic functionality

http://wiki.codemongers.com/NginxMainModule

#----------------------------------------------------------------------

user nginx;
worker_processes 5;

error_log /var/log/nginx/error.log;
#error_log /var/log/nginx/error.log notice;
#error_log /var/log/nginx/error.log info;

pid /var/run/nginx.pid;

#----------------------------------------------------------------------

Events Module

http://wiki.codemongers.com/NginxEventsModule

#----------------------------------------------------------------------

events {
worker_connections 1024;
}

#----------------------------------------------------------------------

HTTP Core Module

http://wiki.codemongers.com/NginxHttpCoreModule

#----------------------------------------------------------------------

http {
include /etc/nginx/mime.types;
default_type application/octet-stream;

log_format  main  '$remote_addr - $remote_user [$time_local] 

$request ’
'"$status" $body_bytes_sent “$http_referer” ’
‘"$http_user_agent" “$http_x_forwarded_for”’;

access_log  /var/log/nginx/access.log  main;

sendfile        on;
#tcp_nopush     on;

#keepalive_timeout  0;
keepalive_timeout  2;


gzip  on;

# Load config files from the /etc/nginx/conf.d directory
include /etc/nginx/conf.d/*.conf;

#
# The default server
#
server {
    listen       80;
    server_name  _;

    #charset koi8-r;

    #access_log  logs/host.access.log  main;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.php index.htm;
    }

    error_page  404              /404.html;
    location = /404.html {
        root   /usr/share/nginx/html;
    }

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # vbseo rewrite
    location /forum/ {
     rewrite ^/forum/((urllist|sitemap_).*\.(xml|txt)(\.gz)?)$ 

/forum/vbseo_sitemap/vbseo_getsitemap.php?sitemap=$1 last;

    if (-f $request_filename) {
    expires 30d;
    break;
    }

   if ($request_filename ~ "\.php$" ) {
   rewrite ^(/forum/.*)$ /forum/vbseo.php last;
   }

   if (!-e $request_filename) {
   rewrite ^/forum/(.*)$ /forum/vbseo.php last;
   }

 location /forum {
     fastcgi_pass  ...;
     fastcgi_param  SCRIPT_FILENAME

/usr/share/nginx/html/forum/show.php;
include fastcgi_params;
}
}

    # pass the PHP scripts to FastCGI server listening on 

127.0.0.1:9000
#
location ~ .php$ {
root /usr/share/nginx/html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME
/usr/share/nginx/html$fastcgi_script_name;
include fastcgi_params;
}

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    location ~ /\.ht {
        deny  all;
    }
}

}


#4

no one can help? :frowning:


#5

On Thu, Jan 15, 2009 at 10:41:02PM +0100, Lemon Head wrote:

location “/forum” is outside location “/forum/” in
/etc/nginx/nginx.conf:121"

If you properly format configuration:

     # vbseo rewrite
     location /forum/ {
         rewrite ^/forum/((urllist|sitemap_).*\.(xml|txt)(\.gz)?)$
              /forum/vbseo_sitemap/vbseo_getsitemap.php?sitemap=$1 

last;

         if (-f $request_filename) {
             expires 30d;
             break;
         }

         if ($request_filename ~ "\.php$" ) {
             rewrite ^(/forum/.*)$ /forum/vbseo.php last;
         }

         if (!-e $request_filename) {
             rewrite ^/forum/(.*)$ /forum/vbseo.php last;
         }

         location /forum {
              fastcgi_pass   ...;
              fastcgi_param  SCRIPT_FILENAME
                             /usr/share/nginx/html/forum/show.php;
              include        fastcgi_params;
         }
     }

then you will see that /forum is inside /forum/:

     location /forum/ {
         ...
         location /forum {

You should use somethig like this:

 location = /forum {
     fastcgi_pass   localhost:9000;
     fastcgi_param  SCRIPT_FILENAME 

/usr/share/nginx/html/forum/show.php;
include fastcgi_params;
}

 location ~ ^/forum/vbseo_sitemap/.+\.php$ {
     fastcgi_pass   localhost:9000;
     fastcgi_param  SCRIPT_FILENAME /usr/share/nginx/html/$uri;
     include        fastcgi_params;
 }

 location ~ ^/forum/.+\.php$ {
     fastcgi_pass   localhost:9000;
     fastcgi_param  SCRIPT_FILENAME 

/usr/share/nginx/html/forum/vbseo.php;
include fastcgi_params;
}

 location /forum/ {
     rewrite ^/forum/((urllist|sitemap_).*\.(xml|txt)(\.gz)?)$
          /forum/vbseo_sitemap/vbseo_getsitemap.php?sitemap=$1 last;

     error_page  404  = /forum/vbseo.php;

     expires 30d;
 }

#6

On Fri, Jan 16, 2009 at 09:41:35AM -0800, mike wrote:

                    rewrite ^/forum/(.*)$ /forum/vbseo.php?vbseourl=$1 last;
            }
    }

site also has other things (blogs etc) that have their own location
blocks and it seems to all work great.

The right way:

 location /forum/ {
     error_page  404  = /forum/vbseo.php;
 }

 location ^~ /forum/urllist {
     rewrite ^/forum/(urllist.*\.(xml|txt)(\.gz)?)$
          /forum/vbseo_sitemap/vbseo_getsitemap.php?sitemap=$1 last;
 }

 location ^~ /forum/sitemap_ {
     rewrite ^/forum/(sitemap_.*\.(xml|txt)(\.gz)?)$
          /forum/vbseo_sitemap/vbseo_getsitemap.php?sitemap=$1 last;
 }

 location ~ ^/forum/.+\.php$ {
     fastcgi_pass   ...;
     fastcgi_param  SCRIPT_FILENAME  /path/to/forum/vbseo.php;
     fastcgi_param  QUERY_STRING     vbseourl=$request_uri;
     include        fastcgi_params;
 }

 location = /forum/vbseo_sitemap/vbseo_getsitemap.php {
     fastcgi_pass   ...;
     fastcgi_param  SCRIPT_FILENAME
                      /path/to/forum/vbseo_sitemap/vbseo_getsitemap.php;
     fastcgi_param  QUERY_STRING     $args;
     include        fastcgi_params;
 }

#7

for vbseo this is all i have for one of my clients:

    location /forum/ {
            rewrite

^/forum/((urllist|sitemap_)..(xml|txt)(.gz)?)$
/forum/vbseo_sitemap/vbseo_getsitemap.php?sitemap=$1 last;
if ($request_filename ~ “.php$”) {
rewrite ^(.
)$ /forum/vbseo.php?vbseourl=$1
last;
}
if (!-e $request_filename) {
rewrite ^/forum/(.*)$
/forum/vbseo.php?vbseourl=$1 last;
}
}

site also has other things (blogs etc) that have their own location
blocks and it seems to all work great.


#8

okay i fixed the /forum/ problem
but not the other,why cant it work without an extra / ?


#9

sorry for the late response guys had some busy days
i still have some problems accessing the forum,if i access
http://site/forum/
it redirects to http://site/index.php which shouldnt happen,if i access
http://site/forum i get “Internet Explorer cannot display the webpage”
but http://site/forum/index.php works fine,any suggestions?


#10

i attached it , i gave up on the image verification
and just set it back to vbulletin original captchta
i’m using the vbseo rewrite rules from the following thread
http://www.vbseo.com/f4/howto-nginx-23485/ they were posted
by a person in the vbseo staff so thought theyll be fine


#11

On Tue, Jan 20, 2009 at 02:14:57PM +0100, Lemon Head wrote:

sorry for the late response guys had some busy days
i still have some problems accessing the forum,if i access
http://site/forum/
it redirects to http://site/index.php which shouldnt happen,if i access
http://site/forum i get “Internet Explorer cannot display the webpage”
but http://site/forum/index.php works fine,any suggestions?

What configuration do you use now ?


#12

tried it but no dice
http://site.com/forum leads to “page not found”
http://site.com/forum/ redirects to http://site.com/index.php
not sure it matters but inside the forum folder there are 2 index
files,the standard vbulletin one and an .html one which redirects to
http://site.com/forum/index.php , it redirected fine with my previous
config but not after puting
the suggested changes , also i just saw your topic about the new nginx
version
and i started to wonder what version i have on my vps,i installed it
from the fedora packages so i wasnt sure,i checked and found out its the
old stable one (0.6.34) , you think that if ill upgrade to the newest
devlopment version it will sort it out? , thanks for all of your help


#13

On Tue, Jan 20, 2009 at 03:53:53PM +0100, Lemon Head wrote:

tried it but no dice
http://site.com/forum leads to “page not found”

Does the file /usr/share/nginx/html/forum/vbseo.php exist ?

http://site.com/forum/ redirects to http://site.com/index.php
not sure it matters but inside the forum folder there are 2 index
files,the standard vbulletin one and an .html one which redirects to
http://site.com/forum/index.php , it redirected fine with my previous
config but not after puting

Then you need to add

fastcgi_index index.php;

inside

    location /forum/ {
        rewrite ^/forum/((urllist|sitemap_).*\.(xml|txt)(\.gz)?)$
             /forum/vbseo_sitemap/vbseo_getsitemap.php?sitemap=$1 

last;

        error_page  404  = /forum/vbseo.php;
    }

the suggested changes , also i just saw your topic about the new nginx
version
and i started to wonder what version i have on my vps,i installed it
from the fedora packages so i wasnt sure,i checked and found out its the
old stable one (0.6.34) , you think that if ill upgrade to the newest
devlopment version it will sort it out? , thanks for all of your help

No, this should work with 0.6.34.


#14

thanks again for your help
i added it and it fixed the /forum/
but i still get “page not found” on /forum
yep it exists and its chmodded to 644


#15

On Tue, Jan 20, 2009 at 02:35:38PM +0100, Lemon Head wrote:

i attached it , i gave up on the image verification
and just set it back to vbulletin original captchta
i’m using the vbseo rewrite rules from the following thread
http://www.vbseo.com/f4/howto-nginx-23485/ they were posted
by a person in the vbseo staff so thought theyll be fine

Attachments:
http://www.ruby-forum.com/attachment/3183/nginx.conf

You should replace

    # vbseo rewrite
    location /forum/ {
    rewrite ^/forum/((urllist|sitemap_).*\.(xml|txt)(\.gz)?)$ 

/forum/vbseo_sitemap/vbseo_getsitemap.php?sitemap=$1 last;

    if ($request_filename ~ "\.php$" ) {
    rewrite ^(.*)$ /forum/vbseo.php last;
    }

   if (!-e $request_filename) {
   rewrite ^/forum/(.*)$ /forum/vbseo.php last;
   }
}

with

    location = /forum {
        fastcgi_pass  127.0.0.1:9000;
        fastcgi_param SCRIPT_FILENAME 

/usr/share/nginx/html/forum/vbseo.php;
include fastcgi_params;
}

    location /forum/ {
        rewrite ^/forum/((urllist|sitemap_).*\.(xml|txt)(\.gz)?)$
             /forum/vbseo_sitemap/vbseo_getsitemap.php?sitemap=$1 

last;

        error_page  404  = /forum/vbseo.php;
    }

    location ~ ^/forum/vbseo_sitemap/.+\.php$ {
        fastcgi_pass  127.0.0.1:9000;
        fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html/$uri;
        include        fastcgi_params;
    }

    location ~ ^/forum/.+\.php$ {
        fastcgi_pass  127.0.0.1:9000;
        fastcgi_param SCRIPT_FILENAME 

/usr/share/nginx/html/forum/vbseo.php;
include fastcgi_params;
}


#16

i think i figured it out,somethin must
have gone wrong with the vbseo install
cuz the vbseo_sitemap folder doesnt exist
ill reinstall it in a bit and let you know


#17

On Tue, Jan 20, 2009 at 06:38:50PM +0100, Lemon Head wrote:

thanks again for your help
i added it and it fixed the /forum/
but i still get “page not found” on /forum
yep it exists and its chmodded to 644

Are you able to see /forum/vbseo.php ?