我有一个自己的域,其中的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
答案 0 :(得分:2)
对于1是,您需要在规则末尾添加一个?
:
RewriteRule . /newurl_1/? [L,NC,R=301]
由于查询字符串是自动附加的,但是带有?
,除非您使用QSA
标志,否则它将不会附加。
对于2,您需要为每个cat参数编写一条规则。您可以这样做,也可以考虑使用RewriteMap
(在htaccess文件中不起作用)。如果要列举所有这些信息,则可能需要调整条件之一,使其看起来像这样:
RewriteCond %{QUERY_STRING} ^cat=12($|&) [NC]
因此它匹配 12 ,而不是 1234