htaccess clean URL's what's the best way t

2019-02-26 00:50发布

问题:

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...

回答1:

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]