.htaccess将具有查询参数的特定非现有文件重定向到新的url

时间:2019-02-12 04:04:00

标签: .htaccess redirect url-redirection

我有一个自己的域,其中的URL具有url结构

https://www.olddomain.com/filename.php?cat=12
https://www.olddomain.com/filename.php?cat=12&id=1212122
https://www.olddomain.com/filename.php?cat=15
https://www.olddomain.com/filename.php?cat=15&id=121423

其中有一个或两个查询参数。现在,我希望它重定向到一个新的域,但具有不同的url结构。

https://www.olddomain.com/filename.php?cat=12 -> https://www.newdomain.com/newurl_1/
https://www.olddomain.com/filename.php?cat=12&id=1212122 -> https://www.newdomain.com/newurl_1/
https://www.olddomain.com/filename.php?cat=15 -> https://www.newdomain.com/newurl_2/
https://www.olddomain.com/filename.php?cat=15&id=121423 -> https://www.newdomain.com/newurl_2/

它应根据“ cat”查询参数重定向到特定的URL。 “ id”或“ cat”之后的任何其他查询参数均无关。

这是我到目前为止所做的

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_URI} ^/filename.php [NC]
  RewriteCond %{QUERY_STRING} ^cat=12(.*) [NC]
  RewriteRule . /newurl_1/ [L,NC,R=301]
</IfModule>

上面的代码工作一半,只是像这样在新网址的末尾添加了查询参数

https://www.newdomain.com/newurl_1/?cat=12
https://www.newdomain.com/newurl_1/?cat=12&id=1212122
  1. 可以从新网址中删除其他查询参数吗?
  2. 如何将.htaccess扩展为多个不同的“ cat”查询参数?

1 个答案:

答案 0 :(得分:2)

对于1是,您需要在规则末尾添加一个?

RewriteRule . /newurl_1/? [L,NC,R=301]

由于查询字符串是自动附加的,但是带有?,除非您使用QSA标志,否则它将不会附加。

对于2,您需要为每个cat参数编写一条规则。您可以这样做,也可以考虑使用RewriteMap(在htaccess文件中不起作用)。如果要列举所有这些信息,则可能需要调整条件之一,使其看起来像这样:

RewriteCond %{QUERY_STRING} ^cat=12($|&) [NC]

因此它匹配 12 ,而不是 1234