<div dir="ltr">Francis,<div><br></div><div>I ended up coming up with this solution:</div><div><div>map $request_uri $request_basename {</div><div>    ~/(?<captured_request_basename>[^/?]*)(?:\?|$) $captured_request_basename;</div>

<div>}</div></div><div>server [</div><div>....</div><div><div>        try_files $uri $uri/ @rewrite;</div><div><br></div><div>        location ~ [^/]\.php(/|$) {</div><div>                fastcgi_split_path_info ^(.+?\.php)(/.*)$;</div>

<div><br></div><div>                if (!-f $document_root$fastcgi_script_name) {</div><div>                        return 404;</div><div>                }</div><div><br></div><div>                fastcgi_pass <a href="http://127.0.0.1:9004">127.0.0.1:9004</a>;</div>

<div>                fastcgi_index index.php;</div><div>                include fastcgi_params;</div><div>        }</div><div><br></div><div>        location @rewrite {</div><div>                if (!-e $request_filename) {</div>

<div>                        rewrite ^/article/[^/]+$ /index.php?title=$request_basename last;</div><div>                }</div><div>        }</div></div><div>....</div><div>}</div><div><br></div><div>This allows me to visit this URL in the browser:</div>

<div><a href="http://mysite.com/article/my_test_page">http://mysite.com/article/my_test_page</a></div><div><br></div><div>and have nginx internally load this page:</div><div><a href="http://mysite.com/index.php?title=my_test_page">http://mysite.com/index.php?title=my_test_page</a></div>

<div><br></div><div>Thanks again for all of your help,</div><div><br></div><div>Andrew</div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Wed, Sep 11, 2013 at 9:31 AM, Francis Daly <span dir="ltr"><<a href="mailto:francis@daoine.org" target="_blank">francis@daoine.org</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="im">On Wed, Sep 11, 2013 at 08:32:09AM -0500, Andrew Martin wrote:<br>
<br>
Hi there,<br>
<br>
</div><div class="im">> Using the similar statement "try_files $uri $uri/ /index.php;", if I visit<br>
> this URL:<br>
> <a href="http://mysite.com/index.php?title=my_test_page" target="_blank">http://mysite.com/index.php?title=my_test_page</a><br>
> then the URL is rewritten to this, but it just loads the contents of<br>
> index.php (without the title variable):<br>
<br>
</div>When you say "the contents of", you mean "the unprocessed php", yes?<br>
<br>
In nginx, one request is handled in one location.<br>
<br>
You must put all of the configuration that you wish to apply to a request,<br>
in the one location that handles that request.<br>
<br>
This means that if you have a "location = /index.php", then if the<br>
request is for /index.php, your "location ~ php" will not be used.<br>
<br>
In this case, can I suggest that you use a slightly different approach,<br>
to keep separate things separate?<br>
<br>
Something like (untested):<br>
<br>
  try_files $uri $uri/ @fallback;<br>
<br>
  location = /index.php {<br>
    # the browser requested /index.php<br>
<div class="im">    if ($arg_title != "") {<br>
      return 302 <a href="http://mysite.com/$arg_title" target="_blank">http://mysite.com/$arg_title</a>;<br>
    }<br>
</div>    fastcgi_pass <a href="http://127.0.0.1:9000" target="_blank">127.0.0.1:9000</a>;<br>
    include fastcgi_params;<br>
  }<br>
<br>
  location @fallback {<br>
    # the browser requested something that is not on the nginx filesystem<br>
    fastcgi_pass <a href="http://127.0.0.1:9000" target="_blank">127.0.0.1:9000</a>;<br>
    fastcgi_param SCRIPT_FILENAME $document_root/index.php;<br>
    fastcgi_param QUERY_STRING title=$uri;<br>
    include fastcgi_params;<br>
  }<br>
<br>
but there will be rough edges there -- you may want the "include" line at<br>
the start of the @fallback stanza rather than the end, and you probably<br>
will need to tweak the QUERY_STRING param passed (to remove the leading /<br>
on $uri, most likely).<br>
<br>
You can test to find what exactly is needed.<br>
<br>
Probably enabling the debug log until you are certain that you understand<br>
what nginx is doing, will be helpful.<br>
<div class="im"><br>
> The php code is a custom page, not a pre-built CMS. It is doing an ajax<br>
> call to load the content, but should be functionally-equivalent to this:<br>
> <html><br>
> <head></head><br>
> <body><br>
> <!-- header code here --><br>
> <?php<br>
> if (isset($_GET['title'])) {<br>
>      include($_GET['title'] . ".html");<br>
> } else {<br>
>      include("home.html");<br>
> }<br>
> ?><br>
> <!-- footer code here --><br>
> </body><br>
> </html><br>
<br>
</div>Can I suggest that you test initially with that exact code, rather<br>
than something that should be functionally equivalent? Keep it simple,<br>
so that you can see at what point in the sequence things first fail.<br>
<br>
(Even better: just do something like "print $_GET['title']", so you can<br>
see exactly what you received. After that works right, add the complexity.)<br>
<br>
If "ajax" means "makes further http requests of nginx", then you'll need<br>
to make sure that the first one works before trying the subsequent ones.<br>
<div class="im"><br>
> If I go to this page:<br>
> <a href="http://mysite.com/index.php?title=my_test_page" target="_blank">http://mysite.com/index.php?title=my_test_page</a><br>
> I would like the client's browser to instead show this URL:<br>
> <a href="http://mysite.com/my_test_page" target="_blank">http://mysite.com/my_test_page</a><br>
<br>
</div>The "return" should do that.<br>
<br>
What you now also want is for, when you go to<br>
<a href="http://mysite.com/my_test_page" target="_blank">http://mysite.com/my_test_page</a>, that nginx knows to tell the fastcgi<br>
server to process the index.php page with certain arguments. For that,<br>
you must configure nginx correctly.<br>
<br>
Keep a very clear picture of how the browser, nginx, and the fastcgi/php<br>
server communicate, and you'll be able to work out where things are not<br>
doing what you expect them to do; and then you may be able to see what<br>
to change, to get the to do what you want.<br>
<div class="im"><br>
> Does this help clarify what I am looking for?<br>
<br>
</div>Building your own php framework, and making it work with nginx.<br>
<br>
If you search for how every other framework does this, you may find<br>
useful hints as to how your one will work.<br>
<br>
Good luck with it,<br>
<div class="HOEnZb"><div class="h5"><br>
        f<br>
--<br>
Francis Daly        <a href="mailto:francis@daoine.org">francis@daoine.org</a><br>
<br>
_______________________________________________<br>
nginx mailing list<br>
<a href="mailto:nginx@nginx.org">nginx@nginx.org</a><br>
<a href="http://mailman.nginx.org/mailman/listinfo/nginx" target="_blank">http://mailman.nginx.org/mailman/listinfo/nginx</a><br>
</div></div></blockquote></div><br></div>