samiles
samiles

Reputation: 3900

Use mod_rewrite to redirect to different pages depending on number of variables

I am currently using the mod_rewrite rule:

RewriteRule ^(.+)/?$ page.php?slug=$1 [L]

This works fine to make /page load page.php?slug=page.

However, I want to URL:

/cat/page

to load

page.php?slug=page

And the URL

/cat

to load the page

cat.php?slug=cat

Is this possible? I could do it on one page.php and use an if to determine which page it should be, however as the code for the category page and the page page is so different, I'd much rather keep them separate.

Thank you,

Sam

Update: More examples, as requested.

/food/pizza loads page.php?slug=pizza

/food loads cat.php?slug=pizza

/animals/pigs loads page.php?slug=pigs

/animals loads cat.php?slug=animals

Upvotes: 0

Views: 102

Answers (1)

Kamil Šrot
Kamil Šrot

Reputation: 2221

RewriteEngine On

RewriteCond %{REQUEST_URI} !=page.php
RewriteCond %{REQUEST_URI} !=cat.php
RewriteRule ^([^/]+)/([^/]+)/?$ cat.php?slug=$2 [L]

RewriteCond %{REQUEST_URI} !=page.php
RewriteCond %{REQUEST_URI} !=cat.php
RewriteRule ^([^/]+)/?$ page.php?slug=$1 [L]

I'm not sure about the names of parameters to cat.php and page.php as your examples are not consistent (sometimes it's slug and sometimes cat?) Anyhow it's minor problem.

Description: the RewriteCond make sure page.php and cat.php will not be rewritten. Then there are regular expressions matching one or two levels of virtual directories passing the request to correct PHP script.

EDIT: not. it's passing it to really the correct script :-)

Upvotes: 2

Related Questions