Forum: NGINX Convert Apache rewrite to NGinx

Posted by "GASPARD kévin" <list-reader@koshie.fr> (Guest)
on 2013-03-03 13:53
(Received via mailing list)
Hi,

Using nginx 1.2.1 on Debian Wheezy 64 bits.

My wordpress need rewrite, it gave me this:


<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>


I've tried to convert it with this website: http://winginx.com/htaccess.
The result is:


# nginx configuration

location / {
     if (!-e $request_filename){
       rewrite ^(.*)$ /index.php break;
     }
}


I've put it into /etc/nginx/conf.d/doinalefort.fr.conf like this:


server {
           listen      80;
           listen      443 ssl;
           # server_name     176.31.122.26;
           server_name     doinalefort.fr www.doinalefort.fr;
           root        /var/www/doinalefort.fr;

           msie_padding on;

           ssl_session_timeout  5m;

           ssl_protocols  SSLv2 SSLv3 TLSv1;
           ssl_ciphers  HIGH:!aNULL:!MD5;
           ssl_prefer_server_ciphers   on;

           error_log       /var/log/nginx/error.log;
           access_log      /var/log/nginx/access.log;

           index         index.php;
           fastcgi_index index.php;

           client_max_body_size      8M;
           client_body_buffer_size 256K;

           location ~ \.php$ {
                   include fastcgi_params;

                   # Assuming php-fastcgi running on localhost port 9000
                   fastcgi_pass unix:/var/run/php5-fpm.sock;
                   fastcgi_param SCRIPT_FILENAME
$document_root$fastcgi_script_name;

                   fastcgi_connect_timeout 60;
                   fastcgi_send_timeout 180;
                   fastcgi_read_timeout 180;
                   fastcgi_buffer_size 128k;
                   fastcgi_buffers 4 256k;
                   fastcgi_busy_buffers_size 256k;
                   fastcgi_temp_file_write_size 256k;
                   fastcgi_intercept_errors on;

           location / {
                   if (!-e $request_filename){
                   rewrite ^(.*)$ /index.php break;
                   }
}

           }
}

And restarted nginx, but it give me this error:


Restarting nginx: nginx: [emerg] location "/" is outside location 
"\.php$"
in /etc/nginx/conf.d/doinalefort.fr.conf:44
nginx: configuration file /etc/nginx/nginx.conf test failed


And idea?

Cordially, Koshie


--
Sorry for my english, I'm trying the best in each e-mail writing. Tell 
me
if I'm not clear enough.
This mail account is only for list reading, to contact me send an e-mail
at kevingaspard@koshie.fr
Posted by Francis Daly (Guest)
on 2013-03-03 16:01
(Received via mailing list)
On Sun, Mar 03, 2013 at 01:52:48PM +0100, GASPARD kvin wrote:

Hi there,

> Using nginx 1.2.1 on Debian Wheezy 64 bits.
>
> My wordpress need rewrite, it gave me this:

> # nginx configuration
>
> location / {
>     if (!-e $request_filename){
>       rewrite ^(.*)$ /index.php break;
>     }
> }

See http://wiki.nginx.org/Pitfalls

Particularly the "Front Controller Pattern based packages" section.

Probably a single extra try_files line will work for you.

  f
--
Francis Daly        francis@daoine.org
Posted by "GASPARD kévin" <list-reader@koshie.fr> (Guest)
on 2013-03-03 19:39
(Received via mailing list)
Thanks for your reply.

>> location / {
>
>   f

This is my new config file :

server {
         listen      80;
         listen      443 ssl;
         # server_name     176.31.122.26;
         server_name     doinalefort.fr www.doinalefort.fr;
         root        /var/www/doinalefort.fr;

         msie_padding on;

#       ssl_certificate      /etc/nginx/certs/auction-web.crt;
#       ssl_certificate_key  /etc/nginx/certs/auction-web.key;

         ssl_session_timeout  5m;

         ssl_protocols  SSLv2 SSLv3 TLSv1;
         ssl_ciphers  HIGH:!aNULL:!MD5;
         ssl_prefer_server_ciphers   on;

         error_log       /var/log/nginx/error.log;
         access_log      /var/log/nginx/access.log;

         index         index.php;
         fastcgi_index index.php;

         client_max_body_size      8M;
         client_body_buffer_size 256K;

         location ~ \.php$ {
                 include fastcgi_params;

                 # Assuming php-fastcgi running on localhost port 9000
                 fastcgi_pass unix:/var/run/php5-fpm.sock;
                 fastcgi_param SCRIPT_FILENAME
$document_root$fastcgi_script_name;

                 fastcgi_connect_timeout 60;
                 fastcgi_send_timeout 180;
                 fastcgi_read_timeout 180;
                 fastcgi_buffer_size 128k;
                 fastcgi_buffers 4 256k;
                 fastcgi_busy_buffers_size 256k;
                 fastcgi_temp_file_write_size 256k;
                 fastcgi_intercept_errors on;

                 try_files $uri $uri/ /index.php?q=$uri&$args;

         }
}


By checking the URL you gave me it seems to be the good choice for
Wordpress (3.5.1). I've restarted nginx, then I've this kind of 
permalink
in Wordpress now: http://doinalefort.fr/%year%/%postname%/ and with the
hello world topic it looks like this :
http://doinalefort.fr/2013/hello-world/

As you can see, I've a 404 error, in /var/log/nginx/error.log I've:
2013/03/03 19:34:31 [error] 27463#0: *252
"/var/www/doinalefort.fr/2013/hello-world/index.php" is not found (2: No
such file or directory), client: 80.239.242.158, server: doinalefort.fr,
request: "GET /2013/hello-world/ HTTP/1.1", host: "doinalefort.fr"

And in access.log:

80.239.242.158 - - [03/Mar/2013:19:35:28 +0100] "GET /2013/hello-world/
HTTP/1.1" 404 142 "-" "Opera/9.80 (X11; Linux x86_64; Edition Next)
Presto/2.12.388 Version/12.14"

An idea?

Also, I've googled a little more and I finally found this blog:
http://themesforge.com/featured/high-performance-w...

But honestly I don't have enough Nginx's knowledge to know if this guy
have write something serious. If you can tell me if it's okay it'll 
maybe
solve a lot of problem before they appear.

Cordially, Koshie


--
Sorry for my english, I'm trying the best in each e-mail writing. Tell 
me
if I'm not clear enough.
This mail account is only for list reading, to contact me send an e-mail
at kevingaspard@koshie.fr
Posted by Steve Holdoway (Guest)
on 2013-03-03 20:00
(Received via mailing list)
Why not just use the wp config examples in the docs? Both Wordpress and 
nginx offer them.


Steve
Posted by Francis Daly (Guest)
on 2013-03-03 20:10
(Received via mailing list)
On Sun, Mar 03, 2013 at 07:38:39PM +0100, GASPARD kvin wrote:

Hi there,

> >Probably a single extra try_files line will work for you.

> This is my new config file :

>         location ~ \.php$ {

>                 try_files $uri $uri/ /index.php?q=$uri&$args;
>         }

You will probably find things much easier when you fully understand what
is written at http://nginx.org/r/location

> http://doinalefort.fr/2013/hello-world/

One request is handled in one location{}. That request does not match
this location, and so will not be handled in this location.

The try_files directive should be in a location that does match --
perhaps "location / {}".

  f
--
Francis Daly        francis@daoine.org
Posted by "GASPARD kévin" <list-reader@koshie.fr> (Guest)
on 2013-03-03 20:19
(Received via mailing list)
Le Sun, 03 Mar 2013 19:59:17 +0100, Steve Holdoway
<steve@greengecko.co.nz> a écrit:

> Why not just use the wp config examples in the docs? Both Wordpress and
> nginx offer them.

Well, I forget to check that... Sorry.

Anyway, I've found this:


>>> Hi there,
>>>>    }
>> This is my new config file :
>> #       ssl_certificate      /etc/nginx/certs/auction-web.crt;
>>
>>                fastcgi_pass unix:/var/run/php5-fpm.sock;
>>                fastcgi_intercept_errors on;
>> and with the hello world topic it looks like this :
>>
>> have write something serious. If you can tell me if it's okay it'll
>>
>> _______________________________________________
>> nginx mailing list
>> nginx@nginx.org
>> http://mailman.nginx.org/mailman/listinfo/nginx
>>
>
> _______________________________________________
> nginx mailing list
> nginx@nginx.org
> http://mailman.nginx.org/mailman/listinfo/nginx


--
--
Sorry for my english, I'm trying the best in each e-mail writing. Tell 
me
if I'm not clear enough.
This mail account is only for list reading, to contact me send an e-mail
at kevingaspard@koshie.fr
Posted by "GASPARD Kévin" <list-reader@koshie.fr> (Guest)
on 2013-03-06 14:41
(Received via mailing list)
Hi,

>>                 try_files $uri $uri/ /index.php?q=$uri&$args;
>>         }
>
> You will probably find things much easier when you fully understand what
> is written at http://nginx.org/r/location

I understand a little more how it works now :).

>> http://doinalefort.fr/2013/hello-world/
>
> One request is handled in one location{}. That request does not match
> this location, and so will not be handled in this location.
>
> The try_files directive should be in a location that does match --
> perhaps "location / {}".
>
>   f

I've created a new locations as you say and I've put the try_files
directive into, it works.

Cordially, Thanks :) !
Please log in before posting. Registration is free and takes only a minute.
Existing account (Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
No account? Register here.