htaccess的如何强制/自动清洁网址(.htaccess how to force/automa

2019-10-17 15:25发布

我是新来的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///

我尼特知道如何得到它来治疗某些部分可选,因此组正常。

Answer 1:

你需要分别处理对参数的每个号码。 你有一个可用于处理一个名称/值对,然后(如果需要和4)类似地接近它为2,和3:

# To handle a single name/value pair in the query string:

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+index\.php\?([^&=]+)=([^&\ ]+)(\ |$) [NC]
RewriteRule ^ /%1\/%2? [R=301,L]

# To handle 2:

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+index\.php\?([^&=]+)=([^&\ ]+)&([^&=]+)=([^&\ ]+)(\ |$) [NC]
RewriteRule ^ /%1\/%2/%3/%4? [R=301,L]

# To handle 3:

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+index\.php\?([^&=]+)=([^&\ ]+)&([^&=]+)=([^&\ ]+)&([^&=]+)=([^&\ ]+)(\ |$) [NC]
RewriteRule ^ /%1\/%2/%3/%4/%5/%6? [R=301,L]

基本上,要添加另一个&([^&=]+)=([^&\ ]+)检查该请求的结束时, (\ |$)并添加另一种/%#/%#到目标URI,其中#“s为适当递增反向引用的结束。



文章来源: .htaccess how to force/automatic clean URL