【发布时间】:2011-04-02 03:46:10
【问题描述】:
我需要重定向
/search?keywords=somesearchterm
到
/search/somesearchterm
这似乎非常基本,但我已经用头敲了一个小时。
感谢您抽出宝贵时间查看此内容。
【问题讨论】:
标签: .htaccess mod-rewrite query-string
我需要重定向
/search?keywords=somesearchterm
到
/search/somesearchterm
这似乎非常基本,但我已经用头敲了一个小时。
感谢您抽出宝贵时间查看此内容。
【问题讨论】:
标签: .htaccess mod-rewrite query-string
您不能匹配 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]
【讨论】:
您想使用 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]
【讨论】: