Htaccess - 使用多种不同条件重写URL

时间:2017-07-06 07:26:07

标签: .htaccess mod-rewrite

我希望在多个条件下使URL友好。

我得到了这个:www.example.com/?lang=en&page=test&model=mymodel

我希望:www.example.com/en/test/mymodel

但我也得到了这个(带有其他参数):

www.example.com/?lang=en&otherpage=othertest&othermodel=myothermodel

必须:

www.example.com/en/othertest/myothermodel

我如何为整个网站执行此操作?

1 个答案:

答案 0 :(得分:0)

如果您要使用如下所示的友好网址:

www.example.com/<language>/<value1>/<value2>

然后Apache 赢得能够区分第一个和第二个非友好的&#34;您提到的网址:

www.example.com/?lang=en&page=test&model=mymodel
www.example.com/?lang=en&otherpage=othertest&othermodel=myothermodel

这是因为参数名称(第一个网址中的pagemodel,第二个网址中的otherpageothermodel)不存在,并且可以&#39;可以从友好的URL中猜到。

可能的解决方法取决于您拥有的场景数量,即您要处理的参数数量。

E.g。如果你只有几个场景,你可以在友好的URL模式中添加一个部分,告诉Apache 使用哪个参数名称,如下所示:

www.example.com/<language>/<parameter_set>/<value1>/<value2>

然后,告诉Apache使用第一个参数集,如果<parameter_set>等于例如1,第二组如果它等于2,依此类推。

示例重写规则集可以是:

RewriteEngine On
RewriteRule ^([\w]+)/1/([\w]+)/([\w]+)$ ./?lang=$1&page=$2&model=$3
RewriteRule ^([\w]+)/2/([\w]+)/([\w]+)$ ./?lang=$1&otherpage=$2&othermodel=$3

请注意,12完全是任意的(它们可以是任何其他字符串)。

当然,the official docs可以提供帮助。