3
votes

I am working on making my site more SEO friendly I am currently using

RewriteEngine On
RewriteRule (.*)$ index.php?page=$1

To turn site.co.uk/index.php?page=page_name into site.co.uk/page_name

I want to also use this for sub pages too. I have tried this:

RewriteEngine On
RewriteRule (.*)/(.*)$ index.php?page=$1&subpage=$2

but its not working, it runs site.co.uk/page_name/sub_page but when you go to site.co.uk/page_name it returns the 404 not found.

I want it to run site.co.uk/page_name and it return page_name

or

site.co.uk/page_name/sub_page and return sub_page

and so on

site.co.uk/page_name/sub_page/sub_page2/...

1

1 Answers

8
votes

Using just:

RewriteEngine On
Options -Indexes
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?page=$1 [L,QSA]

is fine then you can route the request within your script.

You split the page variable with explode() delimiter / and then set the variables.

$route = explode('/',$_GET['page']);

$page    = isset($route[0]) ? $route[0] : null;
$subpage = isset($route[1]) ? $route[1] : null;
$yada    = isset($route[2]) ? $route[2] : null;

Many MVC frameworks use this method. Its called routing.