SEO Friendly Urls

I’m attempting to use Nginx to server a CodeIgniter Script.

Code Igniter uses SEO Friendly scripts (AKA, only uses / instead of ?)

This works fine when I try and use it on Apache. Trying to setup my
own VPS with Code Igniter through NGINX only leans to a pain.

The server is setup with the base folder being a phpbb form, and a
codeigniter script in the folder /fg152/

I’m trying to get the nginx to recognize that index.php/login is
supposed to be a query for code igniter, not a file of its own.

I tried every configuration on this link.

http://codeigniter.com/forums/viewthread/90231/

My current Nginx conf looks like this.

            location /fg152/ {
                    root /home/sites/domain/fg152/;
                    index index.php;
                    try_files $uri $uri/ /fg152/index.php;

            }


            location / {
                    root /home/sites/domain/;
                    index index.php index.html index.htm;
                    # PHPBB SEO REWRITE RULES - ADVANCED
                    # AUTHOR : dcz www.phpbb-seo.com
                    # STARTED : 01/2006

                    rewrite

^/(forum|[a-z0-9_-]-f)([0-9]+)/?(page([0-9]+).html)?$
/viewforum.php?f=$2&start=$4 last;
rewrite
^/(forum|[a-z0-9_-]
-f)([0-9]+)/(topic|[a-z0-9_-]-t)([0-9]+)(-([0-9]+))?.html$
/viewtopic.php?f=$2&t=$4&start=$6 last;
rewrite
^/([a-z0-9_-]
)/?(topic|[a-z0-9_-]-t)([0-9]+)(-([0-9]+))?.html$
/viewtopic.php?forum_uri=$1&t=$3&start=$5 last;
rewrite
^/resources/[a-z0-9_-]+/(thumb/)?([0-9]+)$
/download/file.php?id=$2&t=$1 last;
rewrite ^/member/([^/]+)/?$
/memberlist.php?mode=viewprofile&un=$1 last;
rewrite
^/member/([^/]+)/(topics|posts)/?(page([0-9]+).html)?$
/search.php?author=$1&sr=$2&start=$4 last;
rewrite
^/(group|[a-z0-9_-]
-g)([0-9]+)(-([0-9]+))?.html$
/memberlist.php?mode=group&g=$2&start=$4 last;
rewrite ^/post([0-9]+).html$
/viewtopic.php?p=$1 last;
rewrite ^/active-topics(-([0-9]+))?.html$
/search.php?search_id=active_topics&start=$2&sr=topics last;
rewrite ^/unanswered(-([0-9]+))?.html$
/search.php?search_id=unanswered&start=$2&sr=topics last;
rewrite ^/newposts(-([0-9]+))?.html$
/search.php?search_id=newposts&start=$2&sr=topics last;
rewrite ^/unreadposts(-([0-9]+))?.html$
/search.php?search_id=unreadposts&start=$2 last;
rewrite ^/the-team.html$
/memberlist.php?mode=leaders last;
rewrite
^/([a-z0-9_-]+)/?(page([0-9]+).html)?$
/viewforum.php?forum_uri=$1&start=$3 last;
rewrite
^/.+/(style.php|ucp.php|mcp.php|faq.php|download/file.php)$ /$1
last;
if (!-e $request_filename) {
rewrite
^/([a-z0-9_/-]+)/?(page([0-9]+).html)?$
/viewforum.php?forum_uri=$1&start=$3 last;
break;
}
# END PHPBB PAGES
}

            location ~ \.php$ {
                    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    # A handy function that became available in 0.7.31 that breaks 

down
# The path information based on the provided regex expression
# This is handy for requests such as file.php/some/paths/here/

                    fastcgi_param  PATH_INFO 

$fastcgi_path_info;
fastcgi_param PATH_TRANSLATED
$document_root$fastcgi_path_info;

                    fastcgi_param  QUERY_STRING       $query_string;
                    fastcgi_param  REQUEST_METHOD 

$request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;

                    fastcgi_param  SCRIPT_NAME 

$fastcgi_script_name;
fastcgi_param SCRIPT_FILENAME
$document_root$fastcgi_script_name;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT
$document_root;
fastcgi_param SERVER_PROTOCOL
$server_protocol;

                    fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
                    fastcgi_param  SERVER_SOFTWARE    nginx;

                    fastcgi_param  REMOTE_ADDR        $remote_addr;
                    fastcgi_param  REMOTE_PORT        $remote_port;
                    fastcgi_param  SERVER_ADDR        $server_addr;
                    fastcgi_param  SERVER_PORT        $server_port;
                    fastcgi_param  SERVER_NAME        $server_name;
                    fastcgi_pass unix:/etc/phpcgi/php-cgi.socket;
                    fastcgi_index index.php;
                    }

Now. This lets the script work. Instead of giving 404 on
/fg152/index.php/login it shows the login page. EXCEPT the images do
not log. Huge problem there.

The images are located at /fg152/application/views/images/

And the login.php that its calling is located at
/fg152/application/controllers/

If I remove the location /fg152/ it will show up with the image files
again (But the rest gets a 404 error

I’ve tried using

location /fg152r/ {

    if (-f $request_filename) {
        expires max;
        break;
    }

    if (!-e $request_filename) {
        rewrite ^/fg152/(.*)$ /fg152/index.php/$1 last;
    }
}

Still no luck. What can I do to resolve this issue and get both php
and image files working?

On Sat, 2012-03-03 at 20:30 -0500, adam estes wrote:

I’m trying to get the nginx to recognize that index.php/login is
root /home/sites/domain/fg152/;
index index.php;
try_files $uri $uri/ /fg152/index.php;

            }

The images are located at /fg152/application/views/images/

Try this instead:

            location /fg152 {
                     root /home/sites/domain;
                     index index.php;
                     try_files $uri $uri/ /fg152/index.php;
             }

Remember that the location is appended to the root, so your
configuration would lead to /home/sites/domain/fg152/fg152, which I
don’t think is what you intended.

Regards,
Cliff

Aha! That did it :slight_smile:

Thank you.

Actually, that fixed -most- of it. Butttt

FG152/index.php/cron/graburls/999182b003023a35c327db371a74a85f

Gives a 404 not found :frowning:

2012/3/4 adam estes [email protected]:

Actually, that fixed -most- of it. Butttt

FG152/index.php/cron/graburls/999182b003023a35c327db371a74a85f

Gives a 404 not found :frowning:

location ~ .php$ {

should be:

location ~ .php($|/) {

2012/3/4 adam estes [email protected]:

That just broke things.

It provides No input file specified. when accessing any index.php
links in the /fg152 folder. Including just going to /fg152/index.php

Try this instead:

location ~ .php {

Still giving the same thing :frowning:

That just broke things.

It provides No input file specified. when accessing any index.php
links in the /fg152 folder. Including just going to /fg152/index.php

2012/3/4 adam estes [email protected]:

Still giving the same thing :frowning:

Can you send your current config? In pastebin instead of email.

To expand on this.

/FG152/index.php/cron/graburls/999182b003023a35c327db371a74a85f

This link tells index.php to load cron.php which then run the graburls
command which uses the cronkey (Which is the lost aug)

This returns a 404 with the current config.

2012/3/4 adam estes [email protected]:

To expand on this.

/FG152/index.php/cron/graburls/999182b003023a35c327db371a74a85f

This link tells index.php to load cron.php which then run the graburls
command which uses the cronkey (Which is the lost aug)

This returns a 404 with the current config.

Does the /fg512/index.php work? The 404 comes from nginx or php?

Yes. The index.php does work. It also works with anything that doesn’t
need multiple inputs

Such as

index.php/log
index.php/keywords

etc

The error comes from nginx

404 Not Found

nginx/1.0.5

2012/3/4 adam estes [email protected]:

The error comes from nginx

What’s in error log?

2012/3/4 adam estes [email protected]:

2012/03/04 01:15:30 [error] 7662#0: *36 open()

“/home/sites/domain/FG152/index.php/cron/graburls/999182b003023a35c327db371a74a85f”

failed (2: No such file or directory), client: 71.3.129.216, server:
domain.us, request: “GET$
/FG152/index.php/cron/graburls/999182b003023a35c327db371a74a85f
HTTP/1.1”, host: “domain.us

Is it with location ~ .php or location ~.php$ ?

Right now its .php

It had the $ before and still gave the error.

2012/03/04 01:15:30 [error] 7662#0: *36 open()
“/home/sites/domain/FG152/index.php/cron/graburls/999182b003023a35c327db371a74a85f”
failed (2: No such file or directory), client: 71.3.129.216, server:
domain.us, request: “GET$
/FG152/index.php/cron/graburls/999182b003023a35c327db371a74a85f
HTTP/1.1”, host: “domain.us

2012/3/4 adam estes [email protected]:

Right now its .php

It had the $ before and still gave the error.

Try reverting to .php$ and add one more location block:

location ~ .php/ {
return 503;
}

returns 503

2012/3/4 adam estes [email protected]:

returns 503

Remove the php/ block and change php$ to php (location ~ .php {)