views:

743

answers:

3

When I access my site on MAMP like so, it works great

localhost/site/about-us/

When I upload it to my remote server, and access it like this

http://www.server.com/site/about-us/

all requests go back to the 'default' set up in bootstrap.php.

Here is my route setting.

Route::set('default', '(<page>)')
    ->defaults(array(
        'page' => 'home',
        'controller' => 'page',
        'action'     => 'index',
    ));

The problem is, whenever it gets uploaded to my server, any request like /about-us/ is always defaulting to home as specified when setting the route. If I change that default to 'about-us', every page goes to 'about us'.

Does anyone know what may be causing this? Thanks

UPDATE

Here is a hack that works, but is sure ugly as hell. Still I'd prefer to know why it doesn't work as per expected.

// Hack because I can not get it to go to anything except 'default' below...

 $uri = $_SERVER['REQUEST_URI'];

 $uri = str_replace(url::base(), '', $uri);

 $page = trim($uri, '/');

 if ( ! $page) $page = 'home';


Route::set('default', '(<page>)')
    ->defaults(array(
        'page' => $page,
        'controller' => 'page',
        'action'     => 'index',
    ));
A: 

Are you not mistaking $page for $action?

If I try this, it works just fine. Here's my controllers action method:

public function action_index($page = NULL)

{
    var_dump($page);
}

If I browse to

localhost/site/blup

I see see a nice

string(4) "blup"

being echo'd. I have the default route setup identical to yours.

Caspar
+2  A: 

Your code is basically a catch all route (it's being matched for all requests). You should restrict it like so.

Route::set('static', '(<page>)', array('page' => 'about-us'))
->defaults(array(
    'controller' => 'page',
    'action'     => 'index',
));

The 3rd parameter is a regular expression which defines what the route should match.

That route will route everything matched in the regular expression to the page controller and its index action.

You can then use $page = $this->request->param('page'); in your action.

The Pixel Developer
Thank you! I couldn't find a description like this anywhere in the documentation. Thank you! Thank you! Thank you!
Ty
A: 

It sounds like Kohana's auto-detection of the URL isn't working for your server setup... What web server is it failing on?

You could alter the Request::instance()->execute()... line in the bootstrap to start with:

Request::instance($_SERVER['REQUEST_URI'])->execute()...

That will ensure it uses the correct URI..

That being said ... as The Pixel Developer says, your route looks.. odd .. to me ;)

But - since it works on MAMP - The route is likely not the issue.

Kiall