问题
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]
来源:https://stackoverflow.com/questions/12661287/htaccess-clean-urls-whats-the-best-way-to-do-it