我是 mod_rewrite 的新手,但我正在尽力用干净的 URL 修复我的网站。
使用 RewriteRule 我可以得到它,这样你就可以输入一个干净的 URl 并进入正确的页面,但我遇到的问题是如果使用“凌乱”的 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
当地址中可能有多达 3 个或更多查询时,我无法弄清楚如何让它理清那种 URL。我不完全胜任正则表达式,所以我尝试修改我的代码片段到目前为止失败了。
任何帮助,将不胜感激!我希望它们是 301 重定向,这样无论使用哪种类型的干净或凌乱的 URL,网站都可以正确编入索引并符合 SEO,但我愿意接受建议!
编辑
在玩了几个小时的正则表达式之后,我进步了,但又被难住了。
如果我对此表示:
index\.php\?(.*)=([^\s]+)(&(.*)=([^\s]+))?+
$1/$2/$3/$4/$5
它将匹配 index.php 之后的这 3 个 URL:
http://site.com/index.php?cmd=shop&cat=78
但结果输出取决于它是什么。这些是我的结果:
我不确定如何让它将某些部分视为可选部分,以便正确分组。