我需要一些有关 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 转换。请注意,这只是示例代码——真正的解决方案需要更加强大。