Mod_Rewrite 修改查询字符串帮助

Mod_Rewrite 修改查询字符串帮助

我需要一些有关 mod_rewrite 规则的帮助。

我正在设置一个 SEO 友好的名称目录,并且遇到了一些问题,我知道有一个简单的答案,但我无法让它发挥作用来拯救我的生命。

以下是我们想要发布的示例 URL

http://www.foo.com/bar/ca/marina-del-ray/first-last.html

后端 URL 需要如下所示
/bar/?searchState=ca&searchCity=marina+del+ray&firstName=first&lastName=last

正如您所看到的,对于城市,我需要将“-”替换为“+”

任何帮助都将不胜感激,我希望能够使这个规则足够动态,这样如果一个城市名称包含 1 或 15 个单词,它仍然会转移,而不必为每个许可创建 15 条单独的规则。

非常感谢任何意见或解决方案。

答案1

冒着听起来像老生常谈的风险(因为我提出了类似的解决方案这里),这听起来像是另一种使用编程方式 RewriteMap 可以良好运行的情况。

在您的 Apache 配置中,类似以下内容:

RewriteMap rewriter prog:/path/to/script
RewriteRule ^(.*) %{rewriter:$1} [L]

在你的脚本中,类似这样的内容:

#!/perl 

$| = 1; 

# /bar/ca/marina-del-ray/first-last.html
while (<STDIN>) { 
        my @parts = split /\//;
        my @name = split /-/, $parts[4];
        $name[1] =~ s/\.html$//;
        grep { s/-/+/g } @parts;

        print "/$parts[1]/?searchState=$parts[2]&searchCity=$parts[3]&",
                "firstName=$name[0]&lastName=$name[1]", "\n";
}

这将准确执行您请求的 URL 转换。请注意,这只是示例代码——真正的解决方案需要更加强大。

相关内容