2

I'm working on clean Url's for my website and I noticed that what you find on the internet is pretty much about rewriting your clean urls to the url that your server can work with. So something like this:

www.domain.com/profile/username --> www.domain.com/profile.php?u=username

RewriteEngine On
RewriteRule ^profile/(.*)$ /profile.php?u=$1 [L]

So now with this I should link within my website to the cleanurl's. But intuitively it feels more solid/better to link to the 'dirty' url. So in that case you should use rewriterules for the above AND a redirect rule to rederict the 'dirty url' to the clean url, so the user only sees the clean url in the browser at all time.

www.domain.com/profile.php?u=username --> www.domain.com/profile/username

Is this something that is a good thing to do. Is it done by websites? What are arguments against/ in favour of it?

And how do you do you do a redirect like this. Something like the following doesn't seem to work:

RewriteRule ^profile\.php?u=(.*)$ /profile/$1 [R=301, L]

I'm fairly new to .htaccess so I might ask for something that's obvious...

Juvlius
  • 237
  • 1
  • 2
  • 6

1 Answers1

0
RewriteRule ^profile\.php?u=(.*)$ /profile/$1 [R=301, L]

Isn't going to work because you can't match against the query string from a RewriteRule (you also have a stray space in your flags). You also want to be matching against the actual request and not the URI because you'd just cause a redirect loop from your other rule.

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /profile\.php\?u=([^&\ ]+)
RewriteRule ^/?profile\.php$ /profile/%1 [R=301,L]
Jon Lin
  • 142,182
  • 29
  • 220
  • 220
  • Oké, thanks. But is it a good idea to rewrite urls and redirect urls dually like this? – Juvlius Sep 30 '12 at 20:09
  • 1
    @Juvlius you do this so links you have no control over get pointed to the friendly one. The links that you generate in your content **must** be the friendly ones. You want all URLs that are exposed to the internet to be the friendly ones. The only reason you want this redirect is to point any old links not under your control (like Google index bots) – Jon Lin Sep 30 '12 at 21:05