4

Can anybody please help me with some URL rewriting?

I had: (EXAMPLES)

www.example.com/index.php?page=namepage
www.example.com/index.php?page=gallery&topic=nametopic
www.example.com/index.php?page=homepage&paging=1

I would like to have:

www.example.com/namepage
www.example.com/gallery/nametopic
www.example.com/homepage/1

I have in my htaccess file:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/?$ ?page=$1 [L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/([^/]+)?/?$ ?page=$1&topic=$2

But it doesnt work very well, because i can write:

  • www.example.com/index.php?page=namepage (page or whatever)
  • www.example.com/?page=namepage (page or whatever)
  • www.example.com/namepage/
  • www.example.com/namepage (THIS I WANT - no others)

And second problem is:

  • www.example.com/namepage (OK, i want, we see namepage)
  • www.example.com/namepage/whatever (NO OK, i want 404, but we see namepage)
  • www.example.com/gallery/topic (OK, i want, we see nametopic)
  • www.example.com/whatever/whatever2/whatever3 (OK, i want 404)

VERY THANKS TO ANYBODY.

MmM ...
  • 131
  • 1
  • 2
  • 14

1 Answers1

7
### all your redirects

# for www.example.com/index.php?page=homepage&paging=1
RewriteCond %{THE_REQUEST} \?page=([^&]+)&paging=([0-9]+)
RewriteRule ^ /%1/%2? [L,R=301]

# for www.example.com/index.php?page=gallery&topic=nametopic
RewriteCond %{THE_REQUEST} \?page=([^&]+)&topic=([^&\ ]+)
RewriteRule ^ /%1/%2? [L,R=301]

# for www.example.com/index.php?page=namepage
RewriteCond %{THE_REQUEST} \?page=([^&\ ]+)($|\ )
RewriteRule ^ /%1? [L,R=301]

# for www.example.com/namepage/
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)/$ /$1 [L,R=301]

### all your rewrites back

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/([0-9]+)$ /index.php?page=$1&paging=$2 [L]

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/([^/]+)$ /index.php?page=$1&topic=$2 [L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)$ /index.php?page=$1 [L]
Jon Lin
  • 142,182
  • 29
  • 220
  • 220