首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将/search?query=foo重定向到/search/foo

将/search?query=foo重定向到/search/foo
EN

Stack Overflow用户
提问于 2015-10-05 16:06:03
回答 1查看 366关注 0票数 1

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

我曾在类似的问题中尝试过解决办法,但它们没有奏效。我相信这是因为我试图将请求重写到index.php,以便process能够处理它。

我知道这不是PHP框架造成问题的原因,因为当我手动转到/search/foo时,它被正确地处理了。

我的.htaccess看起来是这样的:

代码语言:javascript
复制
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正在成功地转换成我想要的内容:

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-05 16:14:33

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

代码语言:javascript
复制
RewriteCond %{REQUEST_URI} ^/search$
RewriteCond %{QUERY_STRING} ^query=(.*)$
RewriteRule ^ search/%1 [R=302,NS]

尝试:

代码语言:javascript
复制
RewriteCond %{THE_REQUEST} \ /+search\?query=([^&\ ]+)
RewriteRule ^ search/%1? [L,R=302,NS]

重要的部分是反向引用后的?%1。这告诉mod_rewrite,新的查询字符串只是? (即没有)。因此,现有查询字符串将自动附加到重写的URL/重定向。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32952957

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档