使用htaccess和mod_rewrite在URL中重写搜索词

时间:2012-09-19 19:00:12

标签: php apache mod-rewrite

目前我已经制定了这条重写规则,效果很好:

RewriteRule ^search/([^/]+)/? search.php?term=$1 [NC,QSA]

当我转到mysite.com/search/foo时,它会转到foo的正确搜索页面。我要做的就是做相反的工作,这样如果我访问mysite.com/search.php?term=foo,我将被带到mysite.com/search/foo。我想我需要在某个地方进行301重定向,但我不确定如何在不创建无限循环的情况下执行此操作,到目前为止我读过的其他帖子都没有太多帮助。

3 个答案:

答案 0 :(得分:2)

尝试:

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /search\.php\?term=([^&]+)
RewriteRule ^search\.php$ /search/%1/? [L,R=301]

或(如果您将这些放在已经拥有的规则

之后)
RewriteCond %{ENV:REDIRECT_STATUS} !200
RewriteCond %{QUERY_STRING} ^term=([^&]+)$
RewriteRule ^search\.php$ /search/%1/? [L,R=301]

答案 1 :(得分:0)

试试这个:

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+mysite.com/search.php?term=foo [NC]
RewriteRule ^ mysite.com/search/foo [L,R=301] 

答案 2 :(得分:0)

R标记添加到RewriteRule

RewriteRule ^search/([^/]+)/? search.php?term=$1 [NC,QSA,R=301]