将 /search?query=foo 重定向到 /search/foo
Redirect /search?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 new 查询字符串只是 ?
(即什么都没有)。否则,现有查询字符串会自动附加到重写的 URL/redirect.
我正在尝试将 /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 new 查询字符串只是 ?
(即什么都没有)。否则,现有查询字符串会自动附加到重写的 URL/redirect.