0

I have a database consisting of a table called "pages". I have a controller called "site" and a function called "page"... http://website.com/site/page/page_id.

In the page function it currently looks for the 3th URI segment (page_id), then finds and matches this to a page row in the database and displays the row results.

My question is, is it possible to route/change my URL from http://website.com/site/page/page_id to http://website.com/page_id. And then obviously change my function to find the first URI segment??

My current .htaccess file removes the "index.php", and looks like this:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /db

#Removes access to the system folder by users.
#Additionally this will allow you to create a System.php controller,
#previously this would not have been possible.
#‘system’ can be replaced if you have renamed your system folder.
RewriteCond %{REQUEST_URI} ^system.*
RewriteRule ^(.*)$ /index.php/$1 [L]

#Checks to see if the user is attempting to access a valid file,
#such as an image or css document, if this isn’t true it sends the
#request to index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
#This last condition enables access to the images and css folders, and the robots.txt file
#Submitted by Michael Radlmaier (mradlmaier)
RewriteCond $1 !^(index\.php|images|robots\.txt|css)
RewriteRule ^(.*)$ index.php/$1 [L]
</IfModule>

<IfModule !mod_rewrite.c>
# If we don’t have mod_rewrite installed, all 404’s
# can be sent to index.php, and everything works as normal.
# Submitted by: ElliotHaughin

ErrorDocument 404 /index.php
</IfModule>

1 Answer 1

1

Take a look at this article. Editing the routes.php in your application config should do the trick. Something like this should work:

$route['(:any)'] = 'site/page/$1';

If you use additional controllers, however, more work might be necessary (I assume "site" is your controller, i.e. site.php is located in application/controllers).

In the code, you might also consider using :num instead of :any if your page IDs are only numeric.

Sign up to request clarification or add additional context in comments.

5 Comments

Thank you! Yes your right, I do have other controllers & functions which still need to work. Can you point me in the right direction in terms of going about this? Cheers.
As said, if your page IDs are numeric, just use "(:num)" as selector. With that, the (non-numeric) controller-names won't be matched and re-routed.
Ah, I put page_id for simplicity, however I am actually using an seo version of the name, Eg. page-name as the selector.. Is it still possible? Cheers for the help..
Routes are run in the order they are defined so you would probably need to create routes for all of your controllers and then have this route at the end of your routes file.
Read the article that I linked to. You can either use regular expressions or a correct ordering of the routes (or both combined) to filter certain pages that should be handled in the regular/old way.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.