重定向/搜索吗?Query =foo to /search/foo



我试图将/search?query=foo重定向到/search/foo,但我所有的尝试都失败了。

我尝试过类似问题的解决方案,但他们没有工作。我相信这是因为我试图将请求重写为index.php,以便PHP框架可以处理它。

我知道这不是PHP框架导致的问题,当我手动去/search/foo它被正确处理。

我的.htaccess是这样的:

RewriteEngine On
RewriteCond %{REQUEST_URI} ^/search$
RewriteCond %{QUERY_STRING} ^query=(.*)$
RewriteRule ^ search/%1 [R=302,NS]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [QSA,L]

我不明白为什么它不工作,当我看日志的URL是成功转化为我所追求的:

applying pattern '^' to uri 'search'
RewriteCond: input='/search' pattern='^/search$' => matched
RewriteCond: input='query=asd' pattern='^query=(.*)$' => matched
rewrite 'search' -> 'search/asd'
add per-dir prefix: search/asd -> .../app/public/search/asd
explicitly forcing redirect with http://localhost/.../app/public/search/asd

您需要去掉查询字符串。而不是:

RewriteCond %{REQUEST_URI} ^/search$
RewriteCond %{QUERY_STRING} ^query=(.*)$
RewriteRule ^ search/%1 [R=302,NS]

试题:

RewriteCond %{THE_REQUEST}  /+search?query=([^& ]+)
RewriteRule ^ search/%1? [L,R=302,NS]

重要的部分是%1后面的?。这告诉mod_rewrite, 新的查询字符串只是?(即没有)。否则,现有的查询字符串将自动附加到重写的URL/redirect。

最新更新