<div dir="ltr">Thank you for the suggestion, Anoop. I did not want to do that since it would be evaluated for every request.</div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, May 5, 2016 at 7:52 AM, Anoop Alias <span dir="ltr"><<a href="mailto:anoopalias01@gmail.com" target="_blank">anoopalias01@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi ,<br>
<br>
Can you try putting the rewrite in server{} block outside of all<br>
location{} blocks like<br>
<br>
rewrite "^/test/([a-z]+).php$" /test/test.php?q=$1 last;<br>
<div class="HOEnZb"><div class="h5"><br>
<br>
<br>
On Thu, May 5, 2016 at 5:13 AM, Joyce Babu <<a href="mailto:joyce@joycebabu.com">joyce@joycebabu.com</a>> wrote:<br>
>> If you've got a messy config with no common patterns, you've got a messy<br>
>> config with no common patterns, and there's not much you can do about it.<br>
>><br>
>> If you can find common patterns, maybe you can make the config more<br>
>> maintainable (read: no top-level regex locations); but you don't want<br>
>> to break previously-working urls.<br>
><br>
><br>
> The site was initially using Apache + mod_php. Hence these ere not an issue.<br>
> It was only when<br>
> I tried to migrate to PHP-FPM, I realized the mistakes. Now the urls cannot<br>
> be chanced due to<br>
> SEO implications.<br>
><br>
>><br>
>><br>
>> > I tried using ^~ as you suggested. Now the rewrite is working correctly,<br>
>> > but the files are not executed. The request is returning the actual PHP<br>
>> > source file, not the HTML generated by executing the script.<br>
>><br>
>> Can you show one configuration that leads to the php content being<br>
>> returned?<br>
>><br>
>> If you rewrite /test/x.php to /test.php, /test.php should be handled in<br>
>> the "~ php" location.<br>
><br>
><br>
> I am sorry, I did not rewrite it to a location outside /test/, which was why<br>
> the file content was being returned.<br>
><br>
> Is it possible to do something like this?<br>
><br>
> location /test/ {<br>
>     rewrite "^/test/([a-z]+).php$" /php-fpm/test/test.php?q=$1 last;<br>
> }<br>
><br>
> location ~ ^/php-fpm/ {<br>
>     location ~ [^/]\.php(/|$) {<br>
>         fastcgi_split_path_info ^/php-fpm(.+?\.php)(/.*)$;<br>
><br>
>         fastcgi_pass <a href="http://127.0.0.1:9000" rel="noreferrer" target="_blank">127.0.0.1:9000</a>;<br>
>         fastcgi_index index.php;<br>
>         include fastcgi_params;<br>
>     }<br>
> }<br>
><br>
><br>
> What I have tried to do here is rewrite to add a special prefix (/php-fpm)<br>
> to the rewritten urls. and nest the php location block within it. Then use<br>
> fastcgi_split_path_info to create new $fastcgi_script_name without the<br>
> special prefix. I tried the above code, but it is not working.<br>
> fastcgi_split_path_info is not generating $fastcgi_script_name without the<br>
> /php-fpm prefix.<br>
><br>
><br>
>><br>
>> An alternative possibility could be to put these rewrites at server<br>
>> level rather than inside location blocks. That is unlikely to be great<br>
>> for efficiency; but only you can judge whether it could be adequate.<br>
>><br>
>> > > > location ~ [^/]\.php(/|$) {<br>
>> > > >     fastcgi_split_path_info ^(.+?\.php)(/.*)$;<br>
>> > > ><br>
>> > > >     set $fastcgi_script_name_custom $fastcgi_script_name;<br>
>> > > >     if (!-f $document_root$fastcgi_script_name) {<br>
>> > > >         set $fastcgi_script_name_custom "/cms/index.php";<br>
>> > > >     }<br>
>> > ><br>
>> > > I suspect that it should be possible to do what you want to do there,<br>
>> > > with a "try_files". But I do not know the details.<br>
>> ><br>
>> > There is a CMS engine which will intercept all unmatched requests and<br>
>> > check<br>
>> > the database to see if there is an article with that URI. Some times it<br>
>> > has<br>
>> > to match existing directories without index.php. If I use try_files, it<br>
>> > will either lead to a 403 error (if no index is specified), or would<br>
>> > internally redirect the request to the index file (if it is specified),<br>
>> > leading to 404 error. The if condition correctly handles all the<br>
>> > non-existing files.<br>
>><br>
>> There is more than one possible try_files configuration; but that does not<br>
>> matter: if you have a system that works for you, you can keep using it.<br>
>><br>
>> Good luck with it,<br>
>><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" rel="noreferrer" target="_blank">http://mailman.nginx.org/mailman/listinfo/nginx</a><br>
><br>
><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" rel="noreferrer" target="_blank">http://mailman.nginx.org/mailman/listinfo/nginx</a><br>
<br>
<br>
<br>
</div></div><span class="HOEnZb"><font color="#888888">--<br>
Anoop P Alias<br>
</font></span><div class="HOEnZb"><div class="h5"><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" rel="noreferrer" target="_blank">http://mailman.nginx.org/mailman/listinfo/nginx</a><br>
</div></div></blockquote></div><br></div>