为所有 URL 的任何搜索查询重定向查询字符串

Redirecting query string for any search query for all URLs

我想问一下是否可以重定向

example.com/something?query=hell

example.com/something/hell

在 htaccess 的帮助下。我想对使用 GET 方法传递的所有查询执行此操作。有人知道吗??

您可以在 htaccess 中使用以下规则执行此操作

RewriteEngine On


RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/?$ /something?query= [L]

根据上述规则,您只需在浏览器中输入 example.com/foobar 即可访问位于 example.com/something?query=foobar 的页面。

要将 /something?query=hell“重定向”到 /something/hell,您可以使用 mod_rewrite 执行以下操作:

RewriteEngine On

RewriteCond %{QUERY_STRING} ^query=([^&]*)
RewriteRule ^something$ /[=10=]/%1 [QSD,R=302,L]

RewriteRule 模式 仅匹配 URL 路径。您需要一个额外的 condition 匹配 QUERY_STRING 服务器变量才能匹配查询字符串。

[=16=] 反向引用包含来自 URL 路径的“东西”,%1 包含 query URL 参数的值,例如。 “地狱”,(在前面的 CondPattern 中捕获)。

请注意,query URL 参数必须出现在查询字符串的开头,如您的示例所示。

丢弃查询字符串需要 QSD 标志。

但是,如果您稍后将 URL 重写回查询字符串(实现“漂亮”URLs),那么您将需要一个额外的 条件 以防止重定向循环(以防止重写的请求被重定向)。例如:

RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{QUERY_STRING} ^query=([^&]*)
RewriteRule ^something$ /[=11=]/%1 [QSD,R=302,L]