.htaccess从GET变量重定向到url字符串

时间:2010-08-21 23:58:14

标签: .htaccess mod-rewrite query-string

我需要重定向

/search?keywords=somesearchterm

/search/somesearchterm

这似乎非常基本,但我一直在冲击它一小时。

感谢您抽出时间来研究这个问题。

3 个答案:

答案 0 :(得分:10)

您希望使用mod_rewrite实现所谓的“301重定向”。

RewriteEngine ON
RewriteRule ^/search\?keywords=somesearchterm$ /search/somesearchterm

添加正则表达式:

RewriteEngine ON
RewriteRule ^/search\?keywords=(.+) /search/$1 [R=301,L]

R=301表示提供301标头重定向,以便用户的网址在浏览器中更改,L表示如果匹配规则不再处理重写规则。


如果你想反过来 - 换句话说,如果有人去mysite.com/search/asearchterm并且你希望URL保持不变,但是“幕后”你希望它加载某个服务器脚本,做到这一点:

RewriteEngine ON
RewriteRule ^/search/(.+) /search.php\?keywords=$1 [L]

答案 1 :(得分:0)

看看我对另一个类似线程的回答!

Simulate file structure with PHP

这应该是一个不错的答案!

答案 2 :(得分:0)

您无法在RewriteRule指令中匹配aginst查询字符串。使用%{THE_REQUEST}或%{QUERY_STRING}服务器变量来匹配查询字符串:

以下规则适用于此重定向

 RewriteEngine On
 RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/search\?kewords=([^&\s]+) [NC]
 RewriteRule ^ /search/%1? [NE,NC,R,L]

RewriteRule ^search/([^/]+)/?$ /search?keyword=$1 [QSA,NC,L]