使用静态文件名进行查询时,将静态页面重定向到动态页面

时间:2012-12-19 13:25:38

标签: apache mod-rewrite

以书签为例的人

http://www.dogs.bark/breeds.cfm/12700_female_rottweiler.htm

http://www.dogs.bark/whatevertext/12700_female_rottweiler.htm
(use female + rottweiler)

指示:

http://www.dogs.bark/search/result/?q=female+rottweiler

所以基本上它应该采用以下划线分隔的最后一个词(可以是多个)作为关键词

我知道这应该使用mod.rewrite来完成,但就是这样。我发现很难理解mod重写是如何工作的。

1 个答案:

答案 0 :(得分:1)

您可以使用mod_alias执行此操作:

RedirectMatch 301 ^/.*?/[0-9]+_(.*)\.html?$ /search/result/?q=$1

如果您不想将其作为永久重定向,请删除301。你也可以使用mod_rewrite,它看起来几乎一样:

RewriteRule ^/?.*?/[0-9]+_(.*)\.html?$ /search/result/?q=$1 [L,R=301]

同样,如果您不想进行永久重定向,可以删除=301位。


编辑:

为了用_字符替换查询字符串的+字符,您肯定需要坚持使用mod_rewrite并需要一些额外的规则:

# perform the initial rewrite, but don't redirect
RewriteRule ^/?.*?/[0-9]+_(.*)\.html?$ /search/result/?q=$1 [L]

# replace "_" with "+"
RewriteCond %{QUERY_STRING} ^q=([^_]*)_(.*)$
RewriteRule ^/?search/result/$ /search/result/?q=%1+%2 [L,NE]

# don't redirect until all "_" is replaced with "+"
RewriteCond %{QUERY_STRING} ^q=([^_]+)$
RewriteRule ^/?search/result/$ /search/result?q=%1 [L,R=301]