首页 > 解决方案 > 带有可变查询参数的 htaccess 重定向

问题描述

你能帮我完成这项工作吗?

我正在尝试重定向

/search.php?id=5GHU&distance=50&sort=title

或者

/search.php?id=5GHU

或者

/search.php?id=5GHU&distance=50

/search/?query_string_values

即无论是一个查询字符串参数还是许多他们都应该去那里

这是我尝试过的。

RewriteBase /

RewriteCond %{QUERY_STRING} (?:^|&)id=([^&]+)
RewriteRule ^search\.php$ /search/%1? [L,R=permanent]

谢谢

标签: apache.htaccess

解决方案


对不起,我对你的问题感到困惑,我现在明白了。所以...

像这样修改您的 .htaccess:

RewriteEngine On
RewriteRule "^/search.php$"    "/search/"    [L,R=301,QSA]

简而言之,它将获取查询字符串(以 开头的 /search.php 之后的内容?)并将其附加到“/search/”。这是由 QSA 标志对 RewriteRule 完成的。无论您有多少参数,它都会附加所有参数。

https://httpd.apache.org/docs/2.4/rewrite/flags.html#flag_qsa

所以

/search.php?a=1&b=2  -->    /search/?a=1&b=2
/search.php?c=3      -->    /search/?c=3

由于/search/?a=1&b=2没有指定要使用的页面,它将使用 DirectoryIndex 在您的配置中定义的默认页面。我更喜欢明确指定页面,但没有它也可以工作。


推荐阅读