htaccess clean URL's what's the best way to do it?

末鹿安然 提交于 2019-12-20 02:51:06

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!