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

Posted

技术标签:

【中文标题】.htaccess 从 GET 变量重定向到 url 字符串【英文标题】:.htaccess redirect from GET variable to url string 【发布时间】:2011-04-02 03:46:10 【问题描述】:

我需要重定向

/search?keywords=somesearchterm

/search/somesearchterm

这似乎非常基本,但我已经用头敲了一个小时。

感谢您抽出宝贵时间查看此内容。

【问题讨论】:

【参考方案1】:

您不能匹配 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]

【讨论】:

【参考方案2】:

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

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

添加正则表达式:

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

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


如果你想反其道而行之——换句话说,如果有人访问mysite.com/search/asearchterm,并且你希望 URL 保持不变,但“在幕后”你希望它加载某个服务器脚本,请执行这个:

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

【讨论】:

以上是关于.htaccess 从 GET 变量重定向到 url 字符串的主要内容,如果未能解决你的问题,请参考以下文章

使用 .htaccess 将路径字符串作为 GET 变量重定向到主页

301 基于 .htaccess 中的 GET 变量重定向 URL

htaccess 重定向到新页面但保留“get”参数

.htaccess 中的 301 重定向错误,显示“Bots Get Naked Version”而不是重定向

如何使用 htaccess 将 example.com/x/restofurl 重定向到 example.com/y/restofurl

.htaccess 使用 GET 参数重定向