htaccess 重定向如果参数存在不工作

htaccess redirect if parameter exists not working

如果存在特殊参数,我正在尝试重写任何 URL。

所以这会发生:

发件人:www.example.com/somepage/someother/?entryValue=somevalue

收件人:www.example.com/somepage/someother/?product=test&special=12345ls&linkSource=website

我尝试跟随,但它没有按预期工作: 此代码添加 var/www/* 而不是 link www.example.com/var/www/web6/htdocs/example.com/index.php/*

RewriteCond %{QUERY_STRING} (^|&)entryValue=somevalue
RewriteRule ^(.*)$ /?product=test&special=12345ls&linkSource=website [L,R]

此代码删除路径:

RewriteCond %{QUERY_STRING} (^|&)entryValue=somevalue
RewriteRule ^(.*)$ /?product=test&special=12345ls&linkSource=website [L,R]

我怎样才能让它发挥作用?

RewriteCond %{QUERY_STRING} (^|&)entryValue=somevalue
RewriteRule ^(.*)$ /?product=test&special=12345ls&linkSource=website [L,R]

您需要在 substitution 字符串的开头包含斜杠前缀。像这样:

RewriteRule ^(.*)$ //?product=test&special=12345ls&linkSource=website [L,R]

没有斜杠前缀(RewriteRule 模式 匹配的 URL 路径不包含斜杠前缀)它被视为 relative 和目录前缀(即 /var/www/...)将被添加回去并导致您看到的格式错误的重定向。

更新:

but this ends up with "index.php" and the path is lost

您将指令放在了错误的位置并产生了冲突。 mod_rewrite 指令的顺序很重要。

一般来说,像这样的外部重定向需要在任何内部重写(如前端控制器)之前接近 .htaccess 文件的顶部。