Best practice for URL rewriting with php parameter

Mik J mikydevel at yahoo.fr
Wed Nov 11 18:50:54 UTC 2015


Hello Francis,
First thank you for your answers

I tried both methods but none of them worked. I'm going to look at it more in details (and display the php logs because I just had a blank page).
Also I would like to know why the solution you're offering is a "best practice" ?At first it seems a bit heavy because I'll have a paragraph like that for every x variable (x=information, x=something). Considering also that the users URL might not look like the x variable.nginx.org/info_1234 is an internal rewrite of index.php?x=information
I tried two other solutions that workedrewrite /info_1234 /index.php?x=information;
and
location = /info_1234 { try_files info_1234 /index.php?x=information; }
I would like to understand why your solution is better than these, why is it a best practice ?
Thank you

 


     Le Mercredi 11 novembre 2015 16h47, Francis Daly <francis at daoine.org> a écrit :
   
 

 On Wed, Nov 11, 2015 at 02:29:37PM +0000, Mik J wrote:

Hi there,

> > I want that a user who accessesnginx.org/informationwill be redirected in the background tonginx/index.php?x=informationSo that my index.php page is dymanic
> 
> What does "redirected in the background" mean?M => I just meant that the user won't see the php parameters. He just sees a simple url with text only.Nginx passes the parameter to php, and not the user (through GET). That's what I meant by "in the background"

That's clear, thanks. In nginx terms, it's an internal rewrite.

> > I did like this in my virtual host configurationlocation /information { try_files information /index.php?x=information; }
> > I would like to know if:a) This is the best practice to do what I would like to do ?
> 
> I'd say "no".
> 
> I'm not fully sure what it is that you want to do, but I suspect that
> "rewrite" (http://nginx.org/r/rewrite) may be what you want; unless
> you will describe how /index.php is intended to be handled -- in which
> case just using (e.g.) fastcgi_pass with some suitable fastcgi_param
> directives might be even better.
> M => My index.php looks like this<?php
> if ($_GET['x']) == 'information') { echo "This is the information Page"; } 
> if ($_GET['x']) == 'contact') { echo "This is the contact Page"; } 
> ?>

Your nginx will have some way to cause your index.php to be
processed. Maybe it is proxy_pass to a php-enabled web server; maybe it
is fastcgi_pass to a fastcgi server, maybe it is something else.

If you do something like

  location = /information { rewrite ^ /index.php?x=information; }
  location = /index.php {
    fastcgi_pass ...;
    fastcgi_param SCRIPT_FILENAME $document_root$uri;
    fastcgi_param QUERY_STRING $query_string;
  }

then you could instead omit the rewrite, and just do something like

  location = /information {
    fastcgi_pass ...;
    fastcgi_param SCRIPT_FILENAME $document_root/index.php;
    fastcgi_param QUERY_STRING x=information;
  }

directly.

    f
-- 
Francis Daly        francis at daoine.org

_______________________________________________
nginx mailing list
nginx at nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx


 
  
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.nginx.org/pipermail/nginx/attachments/20151111/4ccbd97c/attachment.html>


More information about the nginx mailing list