如何在query_string中使用htaccess redirectmatch?

时间:2010-04-06 15:02:38

标签: php .htaccess redirect

我试图将"search.php?q=somethinghere"重定向到"search/somethinghere/",但我不能这样做!我正在尝试发送“<form action="search/" method="get" name="search">”这样的表单,但网址会转到"search/?q=somethinghere"

RedirectMatch 301 ^/search.php?q=(.*)$ http://domain.com/search/$1/这也行不通。这个问题是什么?

我不想在网址中使用“?q =”。

3 个答案:

答案 0 :(得分:4)

除非您上面有打字错误,否则问题在于您尝试重定向:

^/search.php?q=(.*)$

但您收到的网址是:

search/?q=somethinghere

(区别在于重定向规则中的.php)

您可能希望尝试使用以下重定向规则:

RedirectMatch 301 ^/search?q=(.*)$ http://domain.com/search/$1/

答案 1 :(得分:0)

在客户端进行此操作会更清晰,更快捷。让Javascript在表单提交上构建search/query URL - 这将为您节省额外的请求。

但是,要通过服务器端重定向执行此操作,您可以mod_rewrite使用RewriteCondQUERY_STRING作为来源:

RewriteCond %{QUERY_STRING}  \bq=([^&]*)$
RewriteRule ^search.php$ /search/%1 [R=301]

答案 2 :(得分:0)

每当我有.htaccess问题时,我总是先看一下这个网站:http://corz.org/serv/tricks/htaccess2.php#cooldenial

该站点提供了许多使用.htaccess文件执行不同操作的示例和说明。根据该网站,你可以尝试类似的东西:

Options +FollowSymlinks
RewriteEngine on
RewriteRule ^search/([^/]+) http://domain.com/search.php?q=$1 [NC]

然而,我不是一个.htaccess大师 - 所以你可能需要摆弄它。