.htaccess перенаправить определенные несуществующие файлы с параметрами запроса на новый URL - PullRequest
0 голосов
/ 12 февраля 2019

У меня есть собственный домен с 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/

Он должен перенаправлять на конкретный URL в зависимости от параметра запроса "cat".«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>

Приведенный выше код работает наполовину.хорошо, за исключением того, что он добавляет параметры запроса в конце нового URL-адреса, например

https://www.newdomain.com/newurl_1/?cat=12
https://www.newdomain.com/newurl_1/?cat=12&id=1212122
  1. Можно ли удалить дополнительные параметры запроса из нового URL-адреса?
  2. Как расширитьмой .htaccess для нескольких разных параметров запроса "cat"?

1 Ответ

0 голосов
/ 12 февраля 2019

Для 1 Да, вам нужно добавить ? в конце вашего правила:

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

, поскольку строка запроса добавляется автоматически, но с ? она не будетдобавляются, если вы не используете флаг QSA.

Что касается 2., вам нужно написать правило для каждого параметра cat.Вы можете сделать это или возможно использовать RewriteMap (который не работает в файле htaccess).Если вы собираетесь перечислять их все, вы можете настроить одно из ваших условий так, чтобы оно выглядело так:

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

, чтобы оно совпадало с 12 , а не как 1234

...