Requests ending with / (slash) are returning 404

Leonardo Crespo leo at leocrespo.com
Wed Apr 7 14:40:43 MSD 2010


I'd to enable the php extension (/foo/page.php)  when the url is
domain.com.au/portal/admin*

Here's my failed attempt and the error I'm getting. I'll make sure to
keep reading as much as possible and not to ask questions that are
already answered.

-------------------
location / {
	try_files $uri @php;
}
location @php {
	try_files $uri.php ${uri}index.php =404;
	
	fastcgi_pass 127.0.0.1:9000;
	fastcgi_intercept_errors on;
	fastcgi_index index.php;
	include /usr/local/nginx/conf/fastcgi_params;
	fastcgi_param SCRIPT_FILENAME
/home/public_html/domain.com.au/public/$fastcgi_script_name;
}

location ~ \.php$ {
#if the uri is not /portal/admin, return 404, disabling the php
extension on the rest of the site
	if (!$uri ~* /portal/admin) {
		return 404;
	}
}
-----------------
Starting nginx: [emerg]: invalid condition "!$request_uri" in
/usr/local/nginx/sites-enabled/domain.com.au:37

Not sure if the syntax is valid and also if I'm putting it in the
right place as to avoid conflict with fastcgi.

Thanks again for the help.

Leonardo.

2010/4/7 Igor Sysoev <igor at sysoev.ru>:
> On Wed, Apr 07, 2010 at 07:26:31PM +1000, Leonardo Crespo wrote:
>
>> I can't make sense of those 2.
>>
>> >  try_files $uri.php ${uri}index.php =404;
>>
>> This means: if  the uri is xxx, try to serve xxx.php. If you can't,
>> try serving xxxindex.php. If you can't still, return 404.
>
> Yes. Note, that ${uri}index.php is for "xxx/", i.e. "xxx/index.php".
>
>> >  try_files $uri.php $uri/ =404;
>>
>> This means: if the uri is xxx, try to serve xxx.php.  If you can't,
>> try serving xxx/ . If you can't still, return 404.
>>
>> Correct? They both work fine, what is the difference between them?
>
> The trailing slash in "$uri/" tests that $uri, i.e., "xxx" or "xxx/"
> is a directory. Further directory handling depends on directives.
>
> If you use
>
>    location / {
>        try_file  ... $uri/  ...
>        index     index.php;
>    }
>
> then nginx will test index file for request, look
> http://nginx.org/en/docs/http/request_processing.html#simple_php_site_configuration
>
> If you use
>
>    location / {
>        try_file  ... $uri/  ...
>        fastcgi_pass      ...
>        fastcgi_index     index.php;
>    }
>
> then nginx will add index.php to $uri in $fastcgi_script_name
> for request with trailing slash.
>
>> On Wed, Apr 7, 2010 at 7:16 PM, Edho P Arief <edhoprima at gmail.com> wrote:
>> > On Wed, Apr 7, 2010 at 4:10 PM, Leonardo Crespo <leo at leocrespo.com> wrote:
>> >> Hi Edho, thanks.
>> >>
>> >> Igor mentioned i should keep this to avoid serving php as static files.
>> >>
>> >> location ~ \.php$
>> >>        {
>> >>                fastcgi_pass 127.0.0.1:9000;
>> >>                fastcgi_intercept_errors on;
>> >>                fastcgi_index index.php;
>> >>                include /usr/local/nginx/conf/fastcgi_params;
>> >>                fastcgi_param SCRIPT_FILENAME
>> >> /home/public_html/boysdownunder.com.au/public/$fastcgi_script_name;
>> >>        }
>> >>
>> >> Will it conflict with this?
>> >>
>> >>> location ~ \.php$ {
>> >>>  return 404;
>> >>> }
>> >>
>> >
>> > as all php requests (usin are passed to @php block (or / block in
>> > Igor's example), there shouldn't be any problem.
>> >
>> > And in my example it should be
>> >
>> >  try_files $uri.php ${uri}index.php =404;
>> >
>> > instead of
>> >
>> >  try_files $uri.php $uri/ =404;
>> >
>> >
>> > --
>> > O< ascii ribbon campaign - stop html mail - www.asciiribbon.org
>> >
>> > _______________________________________________
>> > nginx mailing list
>> > nginx at nginx.org
>> > http://nginx.org/mailman/listinfo/nginx
>> >
>>
>> _______________________________________________
>> nginx mailing list
>> nginx at nginx.org
>> http://nginx.org/mailman/listinfo/nginx
>
> --
> Igor Sysoev
> http://sysoev.ru/en/
>
> _______________________________________________
> nginx mailing list
> nginx at nginx.org
> http://nginx.org/mailman/listinfo/nginx
>



More information about the nginx mailing list