我是新来的mod_rewrite的,但我尽我所能来解决了我的网站的网址干净。
使用重写规则我能得到它,所以你可以在键入一个干净的URL并获得正确的页面,但如果一个“乱”一个使用我在与被自动重定向到URL清洁什么麻烦(这是非常可能的,因为对用户提交的链接和内容等)
现在,我的代码,我在另一个论坛上的.htaccess发现这一点,它工作在一种情况下,而不是其他。 我会解释:
# FORCE CLEAN URLS
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+index\.php\?(.*)=([^\s]+) [NC]
RewriteRule ^ %1\/%2? [R=301,L]
这工作正常,在这样的一个地址,例如:www.domain.com/index.php?cmd=login它会自动重定向到www.domain.com/cmd/login
但问题是当有一个以上的查询,如:www.domain.com/index.php?cmd=view-profile&user=bob
我无法弄清楚如何使梳理出来的那种URL的时候,可能有多达到地址中3次或更多的查询。 我不是正则表达式完全可以胜任,所以我试图修改的代码片段我一直迄今未能。
任何帮助,将不胜感激! 我想他们是301个重定向,以便网站可以得到适当的索引和搜索引擎优化可以兼容,无论使用何种类型的清洁或杂乱的URL,但我开放的建议!
编辑
玩弄正则表达式了几个小时后,我已经进步了,但再次得到难倒。
如果我做了表达这样的:
index\.php\?(.*)=([^\s]+)(&(.*)=([^\s]+))?+
$1/$2/$3/$4/$5
这将匹配从开始的index.php这3个网址:
http://site.com/index.php?cmd=shop&cat=78
http://site.com/index.php?cmd=shop
http://site.com/index.php?cmd=shop&cat=78&product=68
但导致输出取决于它是变化的。 这是我的结果:
http://site.com/cmd=shop&cat/78///
http://site.com/cmd/shop///
http://site.com/cmd=shop&cat=78&product/68///
我尼特知道如何得到它来治疗某些部分可选,因此组正常。